求助!!!10分

B2092 开关灯

Serendi_Pity @ 2022-09-14 19:30:10

输入10, 输出1 2 3 4 5 6 7 8 9 10

#include<iostream>
using namespace std;
int main(){
    int b,c;
    c=2;
    cin>>b;
    int a[b+1];
    for(int i=0;i<=b;i++){
        a[i]=0;
    }
    for(int j=0;j<=b;j++){
        if(j%c==0){
            if(a[j]==0){
                a[j]=1;
            }else{
                a[j]=0;
            }
        }
        c++;
    }
    for(int i=0;i<=b;i++){
        if(a[i]==0){
            cout<<i<<" ";
        }
    }
}

by __Aaaaaaaa @ 2022-09-14 19:36:43

直接输完全平方数


by WZWZWZWY @ 2022-09-14 19:40:27

第一个人将灯全部关闭,第二个人将编号为 2 的倍数的灯打开,将编号为 3 的倍数的灯做相反处理

你每个人只判断了一次if(j%c==0)而j和c每次都会增加一。

j c
1 2
2 3
3 4
4 5

显然j%c永远不可能等于0


by WZWZWZWY @ 2022-09-14 19:52:41

#include<iostream>
using namespace std;
int main(){
    int b,c;
    c=2;
    cin>>b;
    int a[b+1];
    for(int i=1;i<=b;i++){//从1开始 
        a[i]=0;
    }
    for(int j=1;j<=b;j++){
        for(int i = c;i<=b;i+=c)//倍数 
            if(a[i]==0){
                a[i]=1;
            }else{
                a[i]=0;
            }c++;//应该移到for里面 
        }

    for(int i=1;i<=b;i++){
        if(a[i]==0){
            cout<<i<<" ";
        }
    }
}

@sjz520


by Serendi_Pity @ 2022-09-14 20:04:34

@WZRYWZWY 谢谢


by Ehtan @ 2022-10-06 20:42:04

<<#include<bits/stdc++.h>
using namespace std;
int main(){
    int n;
    cin>>n;
    for(int i=1;i*i<=n;i++) cout<<i*i<<" ";
    return 0;

|