本题是 2010 年北京市赛原题
五年级一班全体学生做一个游戏,有 nn 张纸牌,每张纸牌上分别标注着 11、22、33、44……nn个数字,初始时纸牌数字面朝上。全班同学先将 11 的倍数的纸牌翻过来,然后再将 22 的倍数的纸牌再翻过来,一直翻到 nn 的倍数的纸牌。统计翻到最后数字面向下的纸牌分别是哪些?
例如,有 11、22、33 张纸牌,开始时纸牌数字面朝上,第一次翻转 11 的倍数,将所有序号为 11 的倍数的纸牌翻转;第二次翻转 22 的倍数,将所有序号是 22 的倍数的纸牌再翻转;第三次翻转 33 的倍数,将所有序号是 33 的倍数纸牌再翻转,翻牌到此结束。最后数字面向下的纸牌是序号为 11 的那张。
输入格式
输入第一行输入数字为 nn,表示有 nn 张纸牌(n\leq 10000n≤10000)。
输出格式
输出数字面向下的纸牌数字。在同一行输出,两个数字之间用一个空格隔开。
格式说明
输出时每行末尾的多余空格,不影响答案正确性
样例输入
3
样例输出
1
#include <iostream>
#include <string>
using namespace std;int main() {int n;cin>>n;bool a[10001]={0};for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(j%i==0)a[j]=!a[j];}}for(int i=1;i<=n;i++){if(a[i])cout<<i<<" ";}return 0;
}