1122 百灯判熄
题目描述
有M盏灯,编号为1~M,分别由相应的M个开关控制。开始时全部开关朝上(朝上为开,灯亮),然后进行以下操作:编号凡是1的倍数的灯反方向拨一次开关;是2的倍数的灯再反方向拨一次开关;是3的倍数的灯又反方向拨一次开关,......,直到是M的倍数的灯又反方向拨一次开关。请从键盘输入一个整数m代表灯的数量,求出最后为熄灭状态的灯(不亮)的数量以及编号并输出。
输入描述
/*
输入一个整数m(1≤m≤100)。
*/
100
输出描述
/*
输出为两行,第一行是熄灭状态的灯的数量;第二行是最后为熄灭状态的灯的编号(每个数据以4列的域宽显示)。
*/
10
1 4 9 16 25 36 49 64 81 100
#include<stdio.h>
#include<string.h>
//直接暴力枚举就完事了
void lighton(int n){
int i=0;
int j=0;
int arr[100] = {0};
int sum=0;
for(i=1;i<=n;i++)
for(j=0;j<n;j++)
if((j+1)%i==0)
arr[j] = !arr[j];
for(i=0;i<n;i++)
if(arr[i]==1)
sum++;
printf("%d
",sum);
for(i=0;i<n;i++)
if(arr[i]==1)
printf("%d ",i+1);
printf("
");
}
int main()
{
int n=0;
scanf("%d",&n);
lighton(n);
return 0;
}