欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

醉酒狱卒(bool)

最编程 2024-06-15 21:47:21
...

题目描述
在一所*里有一条长长的走廊,沿着走廊排列着n个牢房。每个牢房有一个囚犯,而且房门都是锁着的。
一天晚上,狱卒觉得很无聊,于是他决定玩一个游戏。第一轮,他喝了一口威士忌,然后沿着走廊,将所有牢房的门打开。第二轮,他又喝了一口威士忌,然后又沿着走廊,将所有编号为2的倍数的牢房锁上。第三轮,他再喝一口威士忌,再沿着走廊,视察所有编号为3的倍数的牢房。如果牢房是锁着的,他就把它打开;如果牢房是开着的,他就把他锁上。他如此玩了n轮后,喝下最后一口威士忌,醉倒了。
当他醉倒后,一些犯人发现他们的牢房开着而且狱卒已经无能为力。他们立刻逃跑了。
给出若干个牢房的数目,请你确认各有多少犯人逃出了*。

输入 :第一行为一个正整数。表示接下来的输入有多少行。接着每一行为一个不大于10000的整数,表示牢房的数目n。

输出 :对于每个n,你必须输出当*有n个牢房时逃跑的犯人的数目。

样例输入 Copy
2
5
100
样例输出 Copy
2
10

#include<stdio.h>
#include<string>
#include<cstring>
#include<iostream> 
#include<assert.h>
#include<cmath>
#include<algorithm>
using namespace std;

int main()
{  
	int n,i,x,j;
	cin>>n;
	
	while(n--)
	{
		cin>>x;
		bool a[10001]={false};
		int count=0;
		for(i=1;i<=x;i++)
			for(j=i;j<=x;j+=i)
				a[j]=!a[j];
		for(i=1;i<=x;i++){
			if(a[i])
			     count++;
		}
		cout<<count<<endl;
	}

	return 0;
}

原文地址:https://www.cnblogs.com/Iamcookieandyou/p/13340525.html