0
0
已采纳
赵逸凡
初级启示者
初级启示者
struct STL
{
int flag;//true表示开着,false表示关着
} a[100000];
//这里为了方便注释写结构体。
整形定义 main()
{
定义 n;//定义要输入的n
输入 >> n;
循环(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
if(a[i*j].flag == true) a[i*j].flag=false;
else a[i*j].flag = true;
}
}
for(int i=1; i<=n; i++)
{
如果(a[i].flag == true)输出 << i << " ";
}
return 0;
}
我的代码比较好理解,就是1的j倍判断一下就可以了。
i表示遍历i次,j表示i的j倍,时间复杂度为O(n^2+1)左右
@毕小曼 望采纳谢谢
0
陶旭杰
中级光能
中级光能
int n,a[105]={},sum;
定义;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(j%i==0)
{
if(a[j]==0) a[j]=1;
else a[j]=0;
}
}
}
判断,如果j是i的倍数,就调整窗户的状态;
for(int i=1;i<=n;i++)
if(a[i]==1)
cout<<i<<' ';
输出,如果窗户是开着的,就输出。
祝你AC快乐!!!
0
0
王浩然
新手光能
新手光能
首先定义bool数组。
0表示关着的,1表示开着的
接着双重循环判断是不是倍数,如果是就换成!a[i]。
for(int i=1;i<=n;i++)
for(int j=i;j<=n;j++)
if(j%i==0)
a[j]=!a[j];
最后判断输出
for(int i=1;i<=n;i++)
if(a[i]==1)
cout<<i<<" ";
0
0
0