java开灯问题_算法题-开灯问题

本文介绍了如何使用Java解决开灯问题,提供了两种解题思路:通过定义boolean数组模拟开关流程,以及计算每个灯被开关的次数来确定状态。代码示例详细展示了这两种方法的实现过程。
摘要由CSDN通过智能技术生成

原题如下:

有 n 盏灯,编号 1~n(0

比如输入:10 2 输出最后亮灯的编号:1,3,5,7,9

注意:使用循环语句实现。

java和c都可以实现,下面代码将使用java来实现

首先这题有两种解题思路:

可以通过定义一个boolean数组判断灯是否打开,然后模拟整个开关的流程

可以先算出一个灯被开关的次数,根据开关的次数推断出这个灯现在的开关状态

第一种:

首先我们要先输入两个需要变量,这个两种方法是一样的:

Scanner sc = new Scanner(System.in);

System.out.println("输入灯数:(0

int lampNum = sc.nextInt();

System.out.println("输入人的数量:");

int manNum = sc.nextInt();

然后定义一个boolean数组然后初始化:

boolean[] lamp_flag = new boolean[lampNum];//使用boolean数组来判断灯的开关

for(int i=0;i

lamp_flag[i] = true;

}

接下来就是模拟整个关灯开灯的流程:

for(int i=1;i<=manNum;++i) {

if(i==1) {

continue; //因为之前初始化就把所有灯打开了,所以第一个跳过就可以了

}

for(int j=1;j<=lampNum;++j) {

if(j%i==0) {

if(lamp_flag[j-1]==true) {

lamp_flag[j-1]=false;

}else { //如果灯是关的就打开,如果是开的就关闭

lamp_flag[j-1]=true;

}

}

}

}

最后输出:

for(int i=0;i

if(lamp_flag[i] == true) {

System.out.print((i+1)+" ");

}

}

第二种:

相比第一种方法模拟整个流程第二种方法就要简单很多:

for(int i=1;i<=lampNum;i++) {

int count=0;//count用来统计一个灯开关的次数

for(int j=1;j<=manNum;j++){

if(i%j==0){//灯是人数的倍数即灯被按下一次

count++;

}

}

if(count%2==1){//灯原始状态为熄灭,因此灯泡被按下单数次即灯泡是打开的

System.out.printf("%d ",i);

}

}

最后本人才疏学浅,如果发现有错误或者有不同的,更优的算法,请在评论指出万分感谢

本文作者为 mowang ,转载请注明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值