问题标题: 酷町堂:2902 开关窗户

0
0
已解决
毕小曼
毕小曼
初级光能
初级光能

我可能是思路不对

做了几次运行结果都不对

大佬们

Please help me!!!!!!

求思路和核心

······

毕小曼在2018-11-06 22:06:26追加了内容

链接

救救我!!!!!!(已陷入程序的泥潭


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
栾峻岩
栾峻岩
初级天翼
初级天翼

很简单的一道题,就是输出小于等于n的完全平方数。(可以自己先模拟一遍即可得到规律)

0
0
我要回答