java开灯问题_算法题-开灯问题
原题如下:
有 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 ,转载请注明
java开灯问题_算法题-开灯问题相关推荐
- java猴子分桃_算法——猴子分桃
想做些有关"算法"的练习题,在网上无意间看到了一道很经典的算法题--猴子分桃,于是百度了一下,才发现这道题的相关文档很多很多,但最多的也就是使用C++或者Java来解决这道题,而自 ...
- java数组排列组合_java算法题--递归求数组中数字排列组合问题
java算法题–递归求数组中数字排列组合问题 题目:有一个数组{1,2,3},输出数组中数字的所有可能组合: 比如:123.132.213- 解题思路 通过递归不停的交换数组中的两个数(当然,肯定是有 ...
- Java知识汇总网站,算法题
Jetbrain 语雀小册 Oracle java api 码辣架构 一亩三分地 廖雪峰Git Road To Coding bugstack 虫洞栈 C语言中文网 基本情報技術者試験ドットコム 情報 ...
- pat根据中序遍历和先序遍历_算法题399:从前序与中序遍历序列构造二叉树
(给算法爱好者加星标,修炼编程内功) 来源: 数据结构和算法-山大王wld 问题描述 今天我们就不做关于双指针的了,我们爬到树上玩会儿,做一道关于二叉树的题.今天的题就一句话,根据一棵树的前序遍历与中 ...
- 100个灯泡python编程_算法题:一个圆环上有100个灯泡,灯泡有打...
算法题:一个圆环上有100个灯泡,灯泡有打开关闭两种状态,灯泡状态随机,按一个灯泡,相邻两个灯泡的状态也会改变. eg: ' 暗 - 亮 - 暗 ' 按中间灯泡 ,变化为 ' 亮 - 暗 - 亮 '. ...
- java开闭原则_什么是开闭原则?如何实现开闭原则
2015-04-13 06:30:01 阅读( 137 ) 开闭原则的解释就是:软件实体应当对扩展开放,对修改关闭,也就是:软件系统中包含的各种组件,例如模块(Modules).类(Classes)以 ...
- 华为服务器故障灯不开机_华为手机开不了机指示灯亮,怎么办
展开全部 解决方法: 1.检查手32313133353236313431303231363533e78988e69d8331333365646263机电池是否还有电 先把手机连接充电器进行充电20分钟 ...
- 华为服务器故障灯不开机_华为手机开不了机指示灯亮怎么办?
展开全部 解决方法: 1.检查手机电池是否还有电 先把手机连接充电器进行充电20分钟,然后再进行开机,排除是因62616964757a686964616fe58685e5aeb931333365633 ...
- java中printarray和selectsort方法_算法题(一)
目录 1 左神部分集锦 2 Leetcode前150题 3 牛客网剑指offer 4 JavaG 5 题目中的细节处理 1 左神部分集锦 1.1 Code01_FindNumber_B_In_A 在有 ...
- 腾讯笔试算法题-开锁
题目:有n 把钥匙,m 个锁,每把锁只能由一把特定的钥匙打开,其他钥匙都无法打开.一把钥匙可能可以打开多把锁,钥匙也可以重复使用. 对于任意一把锁来说,打开它的钥匙是哪一把是等概率的.但你无法事先知道 ...
最新文章
- 互联网协议 — HTTPS 安全的超文本传输协议
- jointGrid,边际的颜色和hue保持一致,添加title
- go语言 mysql卡死,Go语言MySQL优化
- sybase 事务插入时不可查询_InnoDB事务与锁
- Ethermint部署及框架解析
- 如何学STM32 —— 十年经验教你如何学习嵌入式系统
- C++获取CPU信息应用经验分享
- CodeBlocks中文乱码
- 数学建模 CUMCM2018年A题真题(本文由西南民族大学白白不加糖、薄荷CC糖原创)
- 当今最热专家凯文•凯利最新演讲精彩全记录
- Mac技巧|如何快速显示Mac桌面?Mac桌面快捷操作方式
- 离散数学 数学三大危机
- CPU的功能和基本组成
- 浅谈 ext2 文件系统的特点、优缺点以及使用场景
- 一个Tab切换类,求指导
- 欢迎查看Vue总结知识
- C 和 C++ 开源库的清单
- rime|小狼毫智能日期效果
- 求泛微E-COLOGY9和EM7授权文件生成器
- WIFI之点对点连接的方法