开灯问题
来源:互联网 发布:java登录界面 数据库 编辑:程序博客网 时间:2024/05/29 09:07
有n盏灯,编号为1~n,第1个人把所有灯打开,第2个人按下所有编号为2 的倍数的开关(这些灯将被关掉),第3 个人按下所有编号为3的倍数的开关(其中关掉的灯将被打开,开着的灯将被关闭),依此类推。一共有k个人,问最后有哪些灯开着?输入:n和k,输出开着的灯编号。k≤n≤1000
- 输入
- 输入一组数据:n和k
- 输出
- 输出开着的灯编号
- 样例输入
7 3
- 样例输出
1 5 6 7
import java.util.*;public class Main { public static void main(String[] args) { Scanner in=new Scanner(System.in); int n=in.nextInt(),k=in.nextInt(); boolean[] b=new boolean[n+1]; int i,j; for ( i = 1; i<=n; i++) b[i]=true; for ( j =2; j <=k; j++) { for ( i = 1; i<=n; i++) { if(i%j==0){ if(b[i]) b[i]=false; else b[i]=true; } else continue; }} for (int j2 = 1; j2 <=n; j2++) {if(b[j2])System.out.print(j2+" ");} } }
设置一个标志数组,true表示灯开着,false表示灯关着,先全部初始化为开灯,即第一个人的动作,然后从第二个人开始循环,满足条件即更改数组的值,从而实现
对于O(n2)的复杂度进行小小的修改:
for ( j =2; j <=k; j++) {
for ( i = j; i<=n; i+=j) {//寻找i的倍数
b[i]=!b[i];//反转数组!
}
}
阅读全文
0 0
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 开灯问题
- 今天开始写博客
- pip安装超时问题解决
- 10条SQL技巧
- Pick-up sticks
- 自己配置Samba服务器步骤,及碰到的一些问题
- 开灯问题
- 1960共用体练习
- lua教程八----不用CCHttpClient而转用quick-cocos2d-x或cocos2dx-LuaProxy的Lua框架实现Lua-Http网络交互!
- 使用 Google V8 引擎开发可定制的应用程序
- vmware12 安装ubuntu 32位 0801
- VPN vs. SSH Tunnel: Which Is More Secure?
- git基本操作(入门级)
- 基于对话框的MFC项目实现窗口分割
- RedisTemplate zSet的使用, 根据点赞排序,和创建时间排序2种方式