CodeVS1399 酗酒的狱警 解题报告【模拟+找规律】

狱警在监狱走廊中进行无聊游戏,每轮按特定规则打开或关闭囚犯房间的门。问题在于,经过n轮后,有多少囚犯能逃脱。输入为房间数n,输出为逃脱囚犯数。通过观察数据发现,当n为完全平方数时,答案发生变化。因此,答案即为(int)(sqrt(n))。

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

题目描述 Description
某监狱里有个很长的走廊,走廊中一个接一个的n个房间。每个房间中锁着一个犯人。一天夜里,狱警决定玩一个无聊游戏。第1轮中,他喝了一口威士忌,然后打开每个房间。第2轮,他喝了一口威士忌,然后按2的倍数遍历每个房间。第3轮,他又喝了一口威士忌,遍历所有3的倍数的房间,以此类推。在遍历中,如果房间是锁着的,则打开;否则锁上。他这样重复n轮,最终醉酒。这时囚犯看到自己房间的锁被打开了,他们立即逃跑。对于有n个房间的走廊,最终会有多少囚犯逃脱?
输入描述 Input Description
仅1行: 一个整数,房间数目n(5≤n≤1000000000)。
输出描述 Output Description
仅1行: 一个整数,逃脱的罪犯数量。
样例输入 Sample Input
100
样例输出 Sample Output
10
数据范围及提示 Data Size & Hint
找规律
解题报告
这道题一看,n<1e9,那么很有可能是有规律可循的(这是数据范围及提示告诉我的)。
为此我先写了一个模拟来打表:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值