1. 程式人生 > 實用技巧 >喝醉的獄卒(bool)

喝醉的獄卒(bool)

題目描述
在一所監獄裡有一條長長的走廊,沿著走廊排列著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;
}