POJ 1218 THE DRUNK JAILER解题报告

本文介绍了一个有趣的算法问题:通过n次遍历操作改变监狱的开关状态,并最终统计处于打开状态的监狱数量。每次遍历会根据当前遍历次数改变特定监狱的状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

挺水的一道题,就是给定一大小为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; }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值