- 论坛徽章:
- 0
|
本帖最后由 mgqw 于 2010-06-24 09:39 编辑
有100盏灯,从1~100编上号,开始时所有的灯都是关着的,
第一次,把所有编号是1的倍数的灯的开关状态改变一次;
第二次,把所有编号是2的倍数的灯的开关状态改变一次;
第三次,把所有编号是3的倍数的灯的开关状态改变一次;
以此类推,直到把所有编号是100得倍数的灯的开关状态改变一次。
问,此时所有开着的灯的编号。
- int main()
- {
- //为了方便观察,只使用a[1]-a[100], j也如此
- //数组内容0代表关灯, 1代表开灯
- int i, j, a[101]={0};
- //循环100次,每次都把第N次所有编号是N的倍数的灯状态改变一次
- for( i=1; i<101; i++ )
- for( j=i; j<101; j++)
- {
- if( j%i==0 )
- {
- a[j] = !a[j];
- }
- }
- //输出所有开着的灯也就是数组内容为1的数组编号
- for ( i=1; i<101; i++ )
- {
- if( a[i]==1 )
- {
- printf("a[%d]=%d\t", i, a[i] );
- }
-
- }
- printf("\n");
- }
复制代码 结果:
[mgqw@localhost test]$ ./a.out
a[1]=1 a[4]=1 a[9]=1 a[16]=1 a[25]=1 a[36]=1 a[49]=1 a[64]=1 a[81]=1 a[100]=1 |
|