c++04:数组的应用:点灯问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

c++04:数组的应⽤:点灯问题

今天来和⼤家分享⼀道题:开门问题(有的地⽅是点灯问题)

宾馆⾥⾯有100个房间,从1到100编号,

第⼀个服务员把所有门打开,

第⼆个服务员把所有编号2倍数的门做相反处理,

第三个服务员把所有编号为3倍数的门做相反处理,

以此类推,到第100个服务员来做处理之后,问哪些门是开着的?

下⾯是分析:

分析:⽤a[1],a[2],……,a[n]表⽰编号1,2,3,……,n的门是否开着,模拟操作即可,程序如下:

#include <cstdio>

#include <cstring>

#define MAXN 100+10

int a[MAXN];

int main(){

int first=1;

memset(a,0, sizeof(a));

for (int i=1;i<=100;++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");

return0;

}

运⾏结果:1 4 9 16 25 36 49 64 81 100(有奇数个因数的数)

补充memset⽤法:

memse(a,0,sizeof(a))的作⽤就是把数组a清零,⽅便⼜便捷。

另⼀个技巧在于输出:为了避免输出多余空格,设置了⼀个标志变量first,可以表⽰当前要输出是否为第⼀个。第⼀个变量前不应有空格,其他都有。

谢谢⼤家!

相关文档
最新文档