挺水的一道题,就是给定一大小为n的数组,第一趟令所有监狱为0,表示所有的监狱都打开,接着第二趟令第2,4, 6……个监狱关闭,第三趟令第3,6,9……个监狱关闭,第四趟………一直到第n趟。若在遍历过程中,发觉监狱已经关闭,则令其打开;发觉监狱已经打开,则令关闭。
最后再遍历一次数组,求得有几个监狱找打开,以还有几个数组元素为0,输出即可。
代码:
#include <stdio.h> #define MAX_CELL_NUM 100 int main(int argc, char *argv[]) { int cells[MAX_CELL_NUM + 1]; int n; scanf("%d", &n); int cellNum, unlockCellNum; int i, j, k; for(i = 1; i <= n; ++i) { scanf("%d", &cellNum); for(j = 1; j <= cellNum; ++j) { cells[j] = 0; } for(j = 2; j <= cellNum; ++j) { for(k = j; k <= cellNum; k += j) { if(cells[k] == 0) cells[k] = 1; else cells[k] = 0; } } unlockCellNum = 0; for(j = 1; j <= cellNum; ++j) { if(cells[j] == 0) unlockCellNum++; } printf("%d/n", unlockCellNum); } return 0; }