在监狱里有n间牢房,一开始每个牢房门都是关着的,每间房里有一个囚犯。监狱长每次先喝一杯威士忌,然后下去打开或关闭一部分牢房的门。第一次把每扇门都打开,第二次改变第2,4,6…扇门的状态,第三次改变第3,6,9,…扇门的状态,以此类推,持续n轮。
给出牢房的数量,求多少囚犯可以逃走。
输入格式:
输入有多组数据,第一行一个数t,表示t组数据,接下来t行,每行一个数n
输出格式:
每组数据,打印一个数,表示能逃走的人数量
输入样例:
2
5
100
输出样例:
2
10
本题是模拟题,代码也是模拟的思路,不过可以总结规律,用数论思想,推出最终结果一定是完全平方数的个数。(n开根号即可)
#include<stdio.h>
int main()
{
int x,n,i,j,k,num=0;
int a[200],b[200];
scanf("%d",&x);
for(i=0;i<x;i++)
{
scanf("%d",&n);
for(j=0;j<n;j++)
{
a[j]=1;
}
for(k=2;k<=n;k++)
{
for(j=1;j<=n;j++)
{
if(j%k==0)
a[j-1]=-a[j-1];
}
}
for(j=0;j<n;j++)
{
if(a[j]==1)
{
num++;
}
}
b[i]=num;
num=0;
}
for(i=0;i<x;i++)
{
printf("%d\n",b[i]);
}
return 0;
}