很有趣的亮灯数量问题

题目:假设有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等等;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值