问题:走廊里依次排列着100盏灯,依次从1号编100号,都关着。
有100个学生从1号编到100号,依次走来,
1号学生从第一只开关按起,凡是1的倍数都按一下,
2号学生从第二只开关按起,凡是2的倍数都按一下,
3号学生从第三只开关按起,凡是3的倍数都按一下,
依次类推,直到第100号学生按完为止。
最后有多少只灯亮着?
题目链接:
http://zhidao.baidu.com/question/1638953715149628980.html
*/
#include <stdio.h>
#define n 100
void main(void)
{
int i, j, a[n];
for(i = 0; i < n; i++) a[i] = 0;// 初始化为全0
for(i = 1; i <= n; i++) //100名学生依次走来
for(j = i ; j <= n; j = j + i) //针对100盏灯
a[j - 1] += 1; //进行操作
//100人对100灯,都操作完毕,下面是显示
for(i = 0; i < n; i++) { //全都显示
if((i % 8) == 0) printf("\n");
printf(" L%02d: %d, ", i + 1, a[i] % 2);
}
printf("\n");
j = 0;
for(i = 0; i < n; i++) {
if(a[i] % 2) { //仅显示亮灯的
if((j % 8) == 0) printf("\n");
j++;
printf(" L%02d: %d, ", i + 1, a[i] % 2);
}
}
printf("\n\n");
}
/*
L01: 1, L02: 0, L03: 0, L04: 1, L05: 0, L06: 0, L07: 0, L08: 0,
L09: 1, L10: 0, L11: 0, L12: 0, L13: 0, L14: 0, L15: 0, L16: 1,
L17: 0, L18: 0, L19: 0, L20: 0, L21: 0, L22: 0, L23: 0, L24: 0,
L25: 1, L26: 0, L27: 0, L28: 0, L29: 0, L30: 0, L31: 0, L32: 0,
L33: 0, L34: 0, L35: 0, L36: 1, L37: 0, L38: 0, L39: 0, L40: 0,
L41: 0, L42: 0, L43: 0, L44: 0, L45: 0, L46: 0, L47: 0, L48: 0,
L49: 1, L50: 0, L51: 0, L52: 0, L53: 0, L54: 0, L55: 0, L56: 0,
L57: 0, L58: 0, L59: 0, L60: 0, L61: 0, L62: 0, L63: 0, L64: 1,
L65: 0, L66: 0, L67: 0, L68: 0, L69: 0, L70: 0, L71: 0, L72: 0,
L73: 0, L74: 0, L75: 0, L76: 0, L77: 0, L78: 0, L79: 0, L80: 0,
L81: 1, L82: 0, L83: 0, L84: 0, L85: 0, L86: 0, L87: 0, L88: 0,
L89: 0, L90: 0, L91: 0, L92: 0, L93: 0, L94: 0, L95: 0, L96: 0,
L97: 0, L98: 0, L99: 0, L100: 1,
L01: 1, L04: 1, L09: 1, L16: 1, L25: 1, L36: 1, L49: 1, L64: 1,
L81: 1, L100: 1,
Press any key to continue
*/
对比几个答案,做而论道编写的程序,最简单。