开灯问题

来源:互联网 发布:js向div中添加元素 编辑:程序博客网 时间:2024/05/22 02:11
描述
有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2 的倍数的开关(这些灯将被关掉),第3 个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共有k个人,问最后有哪些灯开着?输入:n和k,输出开着的灯编号。k≤n≤1000
样例输入
7 3
样例输出

1 5 6 7

分析:用a[1],a[2],...........a[n]表示编号为1,2,3,4.........n的灯是否开着。模拟这些操作。

代码:

<pre name="code" class="cpp">#include<iostream>#include <cstring>using namespace std;int main(){//n盏灯,k个人 int a[100];int n,k,first=1;memset(a,0,sizeof(a));//这个函数在cstring中定义cin>>n>>k;for(int i=1;i<=k;i++)//i控制人数{for(int j=1;j<=n;j++)//j控制登数{if(j%i==0){a[j]=!a[j];//这里的目的是为了给a[j]赋真假值,a[j]为真表示灯亮,a[j]为假表示灯灭。}}}for(int i=1;i<=n;i++){if(a[i])//a[i]为真则输出,a[i]为假则跳过{if(first){first=0;}else cout<<" ";cout<<i;}}return 0;}

“memset(a,0,sizeof(a))”的作用是把数组清零。

此处的first是一个标志变量,可以表示当前要输出的变量是否为第一个,输出的第一个变量前不应有空格,但其他变量都要有。

0 0
原创粉丝点击