peter_p_r @ 2024-09-15 14:54:28
#include<bits/stdc++.h>
using namespace std;
int a[5001]={};
int n;
int main(){
cin>>n;
for(int i=1;i<=n;i++){
a[i]=1;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(a[i]%j==0){
a[i]++;
}
}
}
for(int i=1;i<=n;i++){
if(a[i]%2==0){
cout<<i<<' ';
}
}
return 0;
}
by wyb152511 @ 2024-09-15 15:14:10
第12和13行的i和j反了
应改为:
if(a[j] % i == 0)
{
a[j]++;
}
by peter_p_r @ 2024-09-15 15:36:07
@wyb152511 还是不行?
by wyb152511 @ 2024-09-15 15:38:57
说错了,是if(j % i == 0)
by THE_SUPER_WING @ 2024-09-15 15:39:35
看样例:输出的都是完全平方数。
假设一个灯1关了。 接下来people 1 开灯 接下来people 2 关灯,接下来people 3 开灯.......
如果开关次数是偶数就是关的状态, 否则就是开的。
我们可以把次数定为一个数的平方数,这样开关的次数就是这个平方数的约数。 而我们知道开关次数(也就是约数个数),只要是奇数就是开的状态。
我们知道约数总是成对出现,只有平方数的约数个数是奇数。
所以神奇代码就出来了
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n;
cin >> n;
for(int i = 1; i <= sqrt(n); i++)//通俗一点i * i <= n,跟好理解
{
cout << i * i << ' ';
}
return 0;
}
制作 ~~很容易~~,能不能给个关注
by peter_p_r @ 2024-09-15 15:40:22
@wyb152511 ok谢谢