喝醉的獄卒(bool)
阿新 • • 發佈:2020-07-19
題目描述
在一所監獄裡有一條長長的走廊,沿著走廊排列著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; }