1337 喝醉的狱卒

这篇博客探讨了一个有趣的数学问题,涉及监狱中的囚犯和狱卒的游戏。狱卒按照特定模式依次开关牢房门,而能逃出牢房的囚犯是那些牢房编号的因子个数为奇数的。博主通过编写C++代码,求解在给定牢房数量下,能够逃脱的囚犯数目。问题的关键在于理解并找出哪些数字的因子数量是奇数,这在数论中是一个重要概念。
摘要由CSDN通过智能技术生成

问题描述:某座监狱有一个长长的大厅,里面有n个牢房,每个牢房紧挨着。每个牢房里都有一个囚犯,而且每个牢房都锁着。
一天晚上,狱卒感到无聊,决定玩个游戏。在游戏的第一轮,他喝了一杯威士忌,然后跑下大厅解锁每个牢房。在第2回合中,他喝了一杯威士忌,然后跑下走廊,锁住其他牢房(牢房2、4、6……)。第三轮,他喝了杯威士忌,然后跑到大厅。他每隔3个囚室(囚室3、6、9……)就去一次。如果牢房被锁上了,他就打开它;如果门没锁,他就锁上。他这样重复了n轮,喝完最后一杯,就昏过去了。

一些囚犯,可能是零,意识到他们的牢房没有锁,狱卒失去了行动能力。他们立即逃跑。

已知牢房的数量,确定有多少囚犯越狱。

解题思路:一次AC了,找规律,1到N,可以整除N的就是N的因子(包括1)本身,因子数为奇数个的最后就可以逃出去。

#include <stdio.h>
#include <iostream>

using namespace std;


int main(){
   
    int N,T;
    while(cin>>T)
    {
    	 for(int m=0;m<T;m++)
    	{
    		int escape = 0;
    		cin>>N;
    		for(int i=1;i<=N;i++)
    		{
    			int mcount = 0;
    			for(int j=1;j<=N;j++)
    			{
    				if(i % j == 0)
    					++mcount;
				}
				if(mcount % 2 == 1)
					++escape;
			}
			cout<<escape<<endl;
		}
	}
	    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值