C++ 简单问题————开灯问题

一共有n盏灯(编号为1~n),第一个人把所有灯打开,第2个人按下所有编号为2的倍数的开关(这些灯将会被关掉),第3个人按下所有编号为3的倍数的开关(其中关着的灯将被打开开着了灯将会关闭),依此类推,一共有K个人和n盏灯,请问最后有哪些灯开着。

输入n和k ,输出开着的灯的编号,k<=n<=1000.

代码实现:

#include <iostream>
#include <string.h>
using namespace std;
int main()
{
	int n ,k;
	cin>>n>>k;
	int L[n+1]={0}; // 初始化数组 , 也可以使用memset()函数(需要string.h头文件) 
	//  数组中元素初始均为0,代表均处于关闭状态 
    /*	int L[n+1];
	memset(L,0,sizeof(L));  //memset(数组名,初始化的值,数组长度)
    */
	for (int j=1;j<=k;j++)
	{
		for(int i=1;i<=int(n/j);i++)
			{
				L[i*j]++;
				//  记录每个灯的改变状态的次数 
			}
	}
	for(int s=1;s<=n;s++)
	   if(L[s]%2)
	   // 奇数代表灯最终处于开启状态 
	     cout<<s<<" ";
}

运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值