标签:nefu-6
http://acm.nefu.edu.cn/JudgeOnline/problemshow.php?problem_id=6
题意: 教室里面有n盏灯分别标号1,2,3……n。最开始所有灯都是灭的,有n个同学顺序进入教室,当第一个同学进入教室时,灯全亮;当第二个同学进入教室时,标号为偶数的灯熄灭;当第三个同学进入教室时,执行如下操作: 标号为3的倍数的灯如果是灭的,就把它打开;如果是开的,就把它熄灭;
问这样下去,最后亮着的灯有多少盏。(1<=n<2^32)
分析:数据很大无法直接模拟。
(1) 但是我们很容易发现出规律:如果一盏灯最后是亮的,那么这盏灯的标号一定有奇数个因子,如果标号有偶数个因子,那么一定是灭的。
举个例子: 标号为4的那盏灯 因子:1,2,4
第一个人进去,亮
第二个人进去,灭
第四个人进去,亮
(2) 有结论(1)之后,还需要另一个数学知识
我们可以知道一个大于1的数 n,肯定有两个约数1和n,那么现在当且仅当 n有一个因子i,当i*i=n的时候,n的因子个数才是奇数个。
满足条件的灯的标号依次是:1,4,9,16,25….n^2
(3)综上所述:给定一个整数n,(int)sqrt(n)即为所求;
#include <cstdlib>
#include <iostream>
#include <math.h>
using namespace std;
int main(int argc, char *argv[])
{int n;
long long m;
while(cin>>n)
{for(int i=0;i<n;i++)
{
cin>>m;
cout<<(int)sqrt(m)<<endl;
}
}
return 0;
}
标签:nefu-6
原文地址:http://blog.csdn.net/liusuangeng/article/details/43732889