现场赛:开关灯问题

开关灯问题:有n个人和n盏灯,第一个人开所有的灯,第二个人按所有2的倍数的灯的开关,第三个人按所有3的倍数的灯的开关,依此类推,求最后多少盏灯亮着
解法:按奇数次则亮,偶数次则灭,所以因子数为奇数亮,所以平方数亮,所以即求n内平方数个数,为(int)sqrt(n),如n=16,根号16=4,所以平方数有1*1,2*2,3*3,4*4,即1、4、9、16四个。
code:
#include<stdio.h>
#include<math.h>
int main()
{
    int t,n,m;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&n);
        m=(int)sqrt(1.0*n);
        printf("%d\n",m);
    }
}

posted on 2012-07-26 12:24  acmer-jun  阅读(176)  评论(0编辑  收藏  举报

导航