醉酒狱卒(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