100个标记过的电灯泡

上次面试,面到一个题目,现在有100个标记过的电灯泡。第一个人经过这些灯时,点亮所有的灯,第二个人经过时每隔一盏灯就切换开关一次,第三个人经过时每隔两盏灯切换开关一次。请问,当第100个人经过时,还剩多少盏亮着的灯?我当时没做出来,回来有重新做了下:
我列了没盏灯那个人按的排列一部分来:
第一个灯:1
第二个灯:1,2
第三个灯:1,3
第四个灯:1,2,4
第五个灯:1,5
第六个灯:1,2,3,6
第七个灯:1,7
第八个灯:1,2,4,8
第九个灯:1,3,9
第十个灯:1,2,5,10
第十一个灯:1,11
第十二个灯:1,2,3,4,6,12
第十三个灯:1,13
第十四个灯:1,2,7,14
第十五个灯:1,3,6,15
第十六个灯:1,2,4,8,16
这样我们发现一个规律,只有当第n个灯,能被第n个人整除那个才会按这个灯,
所以写了这个代码//人的个数 int r = 100; //灯的个数 int d = 100; //最后灯亮的个数 int dNum = 0; for (int i = 1; i < d + 1; i++) { //这个灯按的人数 int num = 0; for (int j = 1; j < r + 1; j++) { //如果这个人按了这个灯,num+1 if ((double) i % j == 0) num++; } //最后判断这个灯被按的次数,如果这个灯的次数是奇数就说明这个灯是亮的 if (num % 2 == 1) dNum++; }
最后的结果是10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值