这是一个简单地编程题:
开灯问题。
有n盏灯,编号为1~n。第1个人把所有灯打开,第2个人按下所有编号为2 的倍数的开关(这些灯将被关掉),
第3个人按下所有编号为3的倍数的开关(其中关掉的灯 将被打开,开着的灯将被关闭),依此类推。
一共有k个人,问最后有哪些灯开着?
输 入n和k,输出开着的灯的编号。k≤n≤1000。
样例输入:
7 3
样例输出:
1 5 6 7
我尝试过DevC++和visualC++,运行结果不一样??
代码如下:
#include<iostream>
#include<cstring>
using namespace std;
int main(){
int n, k;
int *a;
cin >> n >> k;
a = new int[n+1];
memset(a, 0, sizeof(a));
for(int i=1; i<=k; ++i){
int j=i;
while(j<=n){
if(a[j]==0)
a[j]=1;
else
a[j]=0;
j+=i;
}
}
for(int i=1; i<=n; ++i)
if(a[i]==1)
cout<<i<<' ';
return 0;
}
dev运行结果:
visual运行结果: