算法竞赛一些基础问题的复习(java) 2(开灯问题、蛇形填数、TEX、wertyu)
2017-01-30 21:53
423 查看
(这些是一个月前写的了,忘了发了。。。)网上搜了一下,完整整理这些题的貌似只有c的,我还是继续用java吧。
1.开灯问题。有n盏灯,编号为1~n。第1个人把所有灯打开,第2个人按下所有编号为2 的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯 将被打开,开着的灯将被关闭),依此类推。一共有k个人,问最后有哪些灯开着?输 入n和k,输出开着的灯的编号。k≤n≤1000
2.蛇形填数。在n×n方阵里填入1,2,…,n×n,要求填成蛇形,n<=8。例如,n=4时方阵为:
3.TeX中的引号(Tex Quotes, UVa 272)
在TeX中,左双引号是““”,右双引号是“””。输入一篇包含双引号的文章,你的任务是 把它转换成TeX的格式。
4.WERTYU(WERTYU, UVa10082)
把手放在键盘上时,稍不注意就会往右错一 位。这样,输入Q会变成输入W,输入J会变成输 入K等。
1.开灯问题。有n盏灯,编号为1~n。第1个人把所有灯打开,第2个人按下所有编号为2 的倍数的开关(这些灯将被关掉),第3个人按下所有编号为3的倍数的开关(其中关掉的灯 将被打开,开着的灯将被关闭),依此类推。一共有k个人,问最后有哪些灯开着?输 入n和k,输出开着的灯的编号。k≤n≤1000
static boolean[] a = new boolean[1005];//为了保险,设为1005,貌似java里!不能给int数组取反,所以new一个布尔数组 public static void main(String[] args) { Arrays.fill(a,false); int n, k, f = 1;// f为判断是否是第一个输出数据,在同行输出时,可不打印行头空格 Scanner sc = new Scanner(System.in); n = sc.nextInt(); k = sc.nextInt(); for (int i = 1; i <= k; i++) {//进来的人逐个循环 for (int j = 1; j <= n; j++) {//灯泡循环 4000 if (j % i == 0) { a[j]=!a[j];//取反 } } } for (int i = 1; i <= n; i++) { if (a[i]) { if (f == 1) { f = 0; } else { System.out.printf(" "); } System.out.print(i); } } } //备忘另外java中赋值数组的方法:System.arraycopy(源数组, 复制源起始位置, 目标数组, 目标起始位置,复制长度)
2.蛇形填数。在n×n方阵里填入1,2,…,n×n,要求填成蛇形,n<=8。例如,n=4时方阵为:
int n, i, j, num;//输入数,行数,列数,填充数 Scanner sc = new Scanner(System.in); n = sc.nextInt(); int a[][] = new int ; for (i = 0; i < n; i++) Arrays.fill(a[i], 0);//二维数组好像不能统一赋值,最少也得一个循环 num = a[i = 0][j = n - 1] = 1;//右上角的1 while (num < n * n) { while (i + 1 < n && a[i + 1][j] == 0)//向下 a[++i][j] = ++num; while (j - 1 >= 0 && a[i][j - 1] == 0)//向左 a[i][--j] = ++num; while (i - 1 >= 0 && a[i - 1][j] == 0)//向上 a[--i][j] = ++num; while (j + 1 < n && a[i][j + 1] == 0)//向右 a[i][++j] = ++num; } for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { System.out.print(" " + a[i][j]); } System.out.println(); }
3.TeX中的引号(Tex Quotes, UVa 272)
在TeX中,左双引号是““”,右双引号是“””。输入一篇包含双引号的文章,你的任务是 把它转换成TeX的格式。
boolean is = true;//按顺序标识左右引号 Scanner sc = new Scanner(System.in); String in = sc.nextLine(); char[] a = in.toCharArray(); for (int i = 0; i < in.length(); i++) { if (a[i] == '"') { if (is) { a[i] = '”'; } else { a[i] = '“'; } is = !is; System.out.print(a[i]); } else System.out.print(a[i]); } //这其实是一个并不完善的程序,因为它并不能解决输入的文本中存在回车的情况,至于怎么解决,我也不知道。。。
4.WERTYU(WERTYU, UVa10082)
把手放在键盘上时,稍不注意就会往右错一 位。这样,输入Q会变成输入W,输入J会变成输 入K等。
String r = "`1234567890-=QWERTYUIOP[]\\ASDFGHJKL;'ZXCVBNM,./";//貌似常量数组是最简单的方法了。。 char[] right=r.toCharArray();//转化成常量数组 Scanner sc = new Scanner(System.in); char[] w=sc.nextLine().toCharArray(); for (int i = 0; i < w.length; i++) { for(int j=0;j<right.length;j++){ if (w[i] == right[j]) {System.out.print(right[j-1]);break;}//输出该字符在正确数组里的前一位 else if(w[i] == ' ') {System.out.print(' ');break;}//出现的空格情况 } }
相关文章推荐
- 算法竞赛一些基础问题的复习(java) 1(大水仙花数、韩信点兵、倒三角、排列)
- 【原创】一些专业基础问题的复习
- [转载]Java一些基础问题
- 算法竞赛入门经典 例3-1开灯问题
- JAVA基础复习:涉及并发的一些基础概念
- java一些基础问题(听说是java应聘者老被问的问题!)
- 【原创】一些专业基础问题的复习
- 基础迷宫问题-------------(图的BFS 题目取自算法竞赛入门)
- 算法竞赛入门第6章DFS算法解八连块问题java版
- 【Java一些基础算法】
- JAVA一些基础算法
- [转载]Java一些基础问题
- 一些java中常见的基础问题的总结
- java面试中经常会被问到的一些算法的问题
- 一些java中常见的基础问题的总结
- 对java初学者所要掌握的一些基础问题
- java基础一些简易算法题
- [转载]Java一些基础问题
- java基础知识整理 一些问题的解答(面试)
- 常用一些Java基础算法积累