题目:假设有N盏灯,默认全部关着,第一个人路过的时候就按下全是1的倍数的灯,第二个路过就按全是2的倍数的灯,直到第N个人路过,按下全是N倍数的灯,问,最后还有几盏灯是亮着的?
思路:一盏灯按奇数次是开着,按偶数次是关着,那每一盏灯都会按它当前序号的因数个数,在数学上,几乎每个数的因数个数都是2个,一种情况例外,那就是平方数,所以亮着的盏灯数量就是有平方数的数量;
举例:假设有4个人:
第一个人经过 全开;
第二个人经过 把,2,4关掉;
第三个人经过 把3关掉
第四个人经过 把4又开着;
总共就开着2盏
代码:
int _tmain()
{
int iCnt = 0;
int n = 0;
cin >> n;
for (int i = 1;;i++)
{
if (i*i>n)
break;
iCnt++;
}
cout << "亮着灯的数量为" << iCnt << endl;
system("pause");
return 0;
}
而且亮着灯的序号正好就是:1,4,9,...16,25等等;