见下

2. n个开关排成一排,从1到n按顺序依次编号。有n个人也从1到n依次编号。第1个人(1号)将开关全部打开。第2个人(2号)将凡是2和2的倍数的开关关闭。第3个人(3号)将凡是3和3的倍数的开关做相反处理(该开关如为打开的,将它关闭;如为关闭的,将它打开)。以后的人都和3号一样,将凡是与自己编号相同的开关和是自己编号倍数的开关做相反处理。编程求解:当第n个人操作之后,哪几个开关是打开的?(注意n为正整数,可以从键盘输入)


#include
int main(int argc, char* argv[])
{
int a[100];
int i , j , n;
cin >> n;
for (i=0 ; i <= n ;i++)
{
a[i] = 1;
}
for (i=2 ; i <= n; i++)
{
for (j=1 ; i*j <= n; j++)
{
if (a[i*j]==0)
{
a[i*j]=1;
}
else
{
a[i*j]=0;
}
}
}
for (i=1 ; i<=n ; i++)
{
if (a[i]==1) cout <<"第"<<i<<"个\n" ;
}
return 0;
}

Related Articles

Quote Of The Day