【题目描述】
首先所有的灯都是关的(注意是关!),编号为 111 的人走过来,把是 111 的倍数的灯全部打开,编号为 222 的人把是 222 的倍数的灯全部关上,编号为 333 的人又把是 333 的倍数的灯开的关上,关的开起来……直到第NN 个人为止。
给定 N,求 N轮之后,还有哪几盏是开着的
【输入】
一个数 N,表示灯的个数和操作的轮数
【输出】
若干数,表示开着的电灯编号
【输入样例】
5
【输出样例】
1 4
#include<iostream>
using namespace std;
int main(){
int n,f;
cin >> n;
for (int i=1;i<=n;i++){
f = 0;
for(int j=1;j<=n;j++){
if(i%j == 0){
f = !f;
}
}
if(f){
cout << i << " ";
}
}
return 0;
}
这题其实是数学题,不然会爆时间,结果为小于n的完全平方数
首先考虑输入输出是否符合要求,
其次考虑输入值得范围,与程序复杂度的要求。你的代码是O(N^2),其实可以写成O(N)
过不了是什么原因?答案错误还是超时还是格式错误?