有编号1~100个灯泡,起初所有的灯都是灭的。有100个同学来按灯泡开关,如果灯是亮的,那么按过开关之后,灯会灭掉。如果灯是灭的,按过开关之后灯会亮。
现在开始按开关。
第1个同学,把所有的灯泡开关都按一次(按开关灯的编号: 1,2,3,……100)。
第2个同学,隔一个灯按一次(按开关灯的编号: 2,4,6,……,100)。
第3个同学,隔两个灯按一次(按开关灯的编号: 3,6,9,……,99)。
……
问题是,在第100个同学按过之后,有多少盏灯是亮着的?
第一种暴力循环,看起来效果也是不错的,下面是第一部分是暴力循环代码,当然还有一种是用数学的方法,非常巧妙
#include <iostream> using namespace std; int a[1010] = {
0}; int main() { int n, k, first = 1; cin>>n>>k; for (int i = 1; i <= k; 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]) { if (first) { first = 0; } else { cout<<" "; } cout<<i; } } return 0; }
讯享网
下面是数学的方法
http://www.cnblogs.com/haolujun/archive/2012/10/10/2719031.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/43621.html