题意:n为5-100之间的一个数,代表有多少间牢房,刚开始所有房间打开,第一轮2的倍数的房间(打开的关上,关上的打开),第二轮3的倍数,第四轮4的倍数......n轮,最后有几间牢房打开的
1.
#include <stdio.h>
#include<string.h>
int main(int argc, char *argv[])
{
int a[111],i,n,sum,T,j;
scanf("%d",&T);
while(T--)
{
memset(a,0,sizeof(a));
scanf("%d",&n);
for (i=2;i<=n;i++)
{
for (j=1;j<=n;j++)
{
if (j%i==0) a[j]=!a[j];
}
}
sum=0;
for (i=1;i<=n;i++)
{
if (a[i]==0) sum++;
}
printf("%d\n",sum);
}
return 0;
}
2.
#include <stdio.h>
#include<math.h>
int main(int argc, char *argv[])
{
int T,n,m;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
m=(int)sqrt(n);
printf("%d\n",m);
}
return 0;
}
算法,打开的房间号刚好是1--n的平方,房间数目sqrt(n)个