解题思路:灯的状态可用1和0表示,这里用的是1开0关。
注意事项:数组的下标是从0开始的,而我们的灯是从1开始,所以需要注意下标的关系
参考代码:
#include<stdio.h> int main() { int N,M,o = 0;//o是个辅助打印格式的记号 scanf("%d %d",&N,&M); int lit[5000] = {0};//没5000个元素不给过 for(int i = 2; i <= M; i++)//因为第一个人会把所有灯关了,所以我们直接初始化为全关然后从第二个人开始循环 { for(int k = i; k <= N; k++)//开关的灯和编号为倍数关系所以小于编号的灯就不用管了 { if(k % i == 0) lit[k-1] = !lit[k-1];//反逻辑操作符让灯变换状态 } } for(int i = 0; i < N; i++)//打印 { if(lit[i] == 0) { if(o == 1) printf(","); printf("%d",i+1); o = 1; } } return 0; }
0.0分
0 人评分