题意:一个喝醉酒的监狱警察玩的游戏,第一次全把门打开,第二次对2的倍数的门开的关--关的开,依次类推。
代码:
include<iostream>
using namespace std;
int main()
{
long number,k=0,cishu,sum;
int a[101],person,j;
cin>>number;
while(k<number)
{
sum=0;
cin>>person;
for(j=1;j<=person;j++)
a[j]=1;
for(j=2;j<=person;j++)
{
cishu=j;
while(cishu<=person)
{
a[cishu]=!a[cishu];//取反得操作,不是1就是0.
cishu+=j;
}
}
for(j=1;j<=person;j++)
sum+=a[j];
cout<<sum<<endl;
k++;
}
return 0;
}
本文介绍了一个有趣的数学问题,即醉酒的监狱警察通过一系列开关门的操作来改变囚室门的状态。通过C++代码实现这一过程,展示了如何计算最终处于打开状态的门的数量。该问题本质上是一个关于数论中因数计数的问题。
1257

被折叠的 条评论
为什么被折叠?



