POJ-1218-醉酒的狱卒

醉酒的狱卒
时间限制:1000MS内存限制:10000K
提交总数: 31109录用日期:18783
描述
某所监狱里有一长串n个牢房,每个牢房都紧挨着。每个牢房里都有一个囚犯,每个牢房都被锁上了。
一天晚上,狱卒感到无聊,决定玩游戏。在游戏的第1回合,他喝了一杯威士忌,然后跑下大厅解锁每个牢房。在第2回合,他喝了一杯威士忌,然后跑下
大厅,锁住其他牢房(2、4、6、?)。在第3回合,他喝了一杯威士忌,然后跑下大厅。他每三个牢房(牢房3,6,9,?如果细胞被锁定,他就会解锁它;如果它被解锁,他会锁定它。他
重复了n轮,喝了最后一杯,然后昏倒了。
一些囚犯,可能是零,意识到他们的牢房被解锁,狱卒没有行动能力。他们立即逃脱。
根据牢房的数量,确定有多少囚犯逃脱监狱。

输入

输入的第一行包含单个正整数。这是后面的行数。以下每一行都包含一个介于 5 和 100 之间的单个整数(包括 5 和 100),即单元格 n 的数量。

输出

对于每行,您必须打印出当监狱有 n 个单元格时越狱的囚犯数。

示例输入

2
5
100

示例输出

2
10

思路:我们先列一个表找一下规律   

  原本牢房全是关闭的,第一次会都打开,第二次会把2的倍数的都打开..........我们找一个数字看6 —2,3,6共三次会对其造成影响,经历开-关-开-关,所以进行操作数为奇数时,最后状态为关,操作数为偶数时最后状态为开。我们只需记录一下从2开始他可以被几个数整除就可以,包括其本身。

#include<iostream>
using namespace std;
int n,cnt=0;
int main()
{
	int x=0;
	cin>>x;
	while(x--)
    {
    cin>>n;
    if(n>=4) cnt=2;
	else cnt=1; 
    for(int i=6;i<=n;i++)
    {
    	int ans=0;
       for(int j=2;j<=n;j++)
       {
       	if(i%j==0) ans++;
	   }
       if(ans%2==0) cnt++;
	}
	cout<<cnt<<endl;
	}
	return 0;
}

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值