2464 - 【数组】开门问题(例题)
例5.3 宾馆里有一百个房间,从1-100编了号。第一个服务员把所有的房间门都打开了,第二个服务员把所有编号是2的倍数的房间“相反处理”,第三个服务员把所有编号是3的倍数的房间作“相反处理”…,以后每个服务员都是如此。当第100个服务员来过后,哪几扇门是打开的。(所谓“相反处理”是:原来开着的门关上,原来关上的门打开。)
Input
无输入。
Output
从小到大输出开着门的房间编号,中间用一个空格分隔,行尾不能有空格。
Examples
Input
no input needed
Output
1 4 9 16 25 36 49 64 81 100
Solution C
#include<stdio.h> #include<string.h> int a[1000]; int main() { int i,j,l=0; memset(a,0,sizeof(a)); for(j=1;j<=100;j++) { for(i=1;i<=100;i++) if(i%j==0) { a[i]=!a[i]; }} for(i=1;i<=100;i++) { if(a[i]!=0) { l++; if(l==1)printf("%d",i); if(l>1)printf(" %d",i); }} return 0; }
Solution C++
#include<cstdio> #include<cstring> #include<cstdio> #define MAXN 100+10 int a[MAXN]; int main() { int k,n,first; first=1; memset(a,0,sizeof(a)); for (int i=1;i<101;++i) for (int j=1;j<=100;++j) if (j%i==0) a[j]=!a[j]; for (int i=1;i<=100;++i) if (a[i]) { if(first) first=0; else printf(" "); printf("%d",i); } printf("\n"); return 0; }