算法笔记_113:算法集训之代码填空题集一(Java)
Posted 舞动的心
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法笔记_113:算法集训之代码填空题集一(Java)相关的知识,希望对你有一定的参考价值。
目录
1 报数游戏
有n个孩子站成一圈,从第一个孩子开始顺时针方向报数,报到3的人出列,下一个人继续从1报数,直到最后剩下一个孩子为止。问剩下第几个孩子。下面的程序以10个孩子为例,模拟了这个过程,请完善之(提示:报数的过程被与之逻辑等价的更容易操作的过程所代替)。 Vector a = new Vector(); for(int i=1; i<=10; i++) { a.add("第" + i + "个孩子"); } for(;;) { if(a.size()==1) break; for(int k=0; k<2; k++) ________________; a.remove(0); } System.out.println(a); a.add(a.remove(0))
2 不连续处断开
下列代码运行结果为: 12345 23456 89 23456789 即把一个串从数字不连续的位置断开。试完善之。 String s = "12345234568923456789"; String t = "1"; for(int i=1; i<s.length(); i++) { if(s.charAt(i)==s.charAt(i-1)+1) { t += s.charAt(i); } else { System.out.println(t); _____________________________; } } System.out.println(t); t = "" + s.charAt(i)
3 猜数字游戏
猜数字 很多人都玩过这个游戏:甲在心中想好一个数字,乙来猜。每猜一个数字,甲必须告诉他是猜大了,猜小了,还是刚好猜中了。下列的代码模拟了这个过程。其中用户充当甲的角色,计算机充当乙的角色。为了能更快地猜中,计算机使用了二分法。 阅读分析代码,填写缺失的部分。 把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。 System.out.println("请在心中想好一个数字(1~100),我来猜"); System.out.println("我每猜一个数字,你要告诉我是“猜大了”,“猜小了”,还是“猜中”"); Scanner scan = new Scanner(System.in); int v1 = 1; int v2 = 100; for(;;) { int m = (v1 + v2)/2; System.out.println("我猜是:" + m); System.out.println("1.猜得太大了"); System.out.println("2.猜得太小了"); System.out.println("3.猜中!"); System.out.print("请选择:"); int user = Integer.parseInt(scan.nextLine()); if(user==3) break; if(user==1) _____________; if(user==2) _____________; } v2 = m - 1 v1 = m + 1
4 串的反转
反转串 我们把“cba”称为“abc”的反转串。 求一个串的反转串的方法很多。下面就是其中的一种方法,代码十分简洁(甚至有些神秘),请聪明的你通过给出的一点点线索补充缺少的代码。 把填空的答案(仅填空处的答案,不包括题面)存入考生文件下对应题号的“解答.txt”中即可。 public static String reverseString(String x) { if(x==null || x.length()<2) return x; return ____________________ + x.charAt(0); } reverseString(x.substring(1))
5 串中找数字
以下的静态方法实现了:把串s中第一个出现的数字的值返回。 如果找不到数字,返回-1 例如: s = "abc24us43" 则返回2 s = "82445adb5" 则返回8 s = "ab" 则返回-1 public static int getFirstNum(String s) { if(s==null || s.length()==0) return -1; char c = s.charAt(0); if(c>=‘0‘ && c<=‘9‘) return _____________; //填空 return ___________________; //填空 } 请分析代码逻辑,并推测划线处的代码。 答案写在 “解答.txt” 文件中 注意:只写划线处应该填的内容,划线前后的内容不要抄写。 return c - ‘0‘ getFirstNum(s.substring(1))
6 递归连续数
以下程序打印出0~9的数字,请补充缺少的代码。 public class MyTest { public static void f(int begin, int end) { __________________; System.out.println(begin); f(begin+1, end); } public static void main(String[] args) { f(0,9); } } if(begin > end) return
7 复制网站内容
本程序将网站“www.baidu.com”首页的内容复制保存在文件test.html中。写了如下代码,请完善之: import java.net.*; import java.io.*; class DaSai{ public static void main(String[] args) throws Exception { URL url=__________________________________; BufferedReader in =_________________________________; String inString; File outfile=new File("test.html"); PrintWriter out=new PrintWriter(new FileWriter(outfile)); while ((inString=in.readLine())!=null){ out.println(inString); } in.close(); out.close(); } } new URL("http://www.baidu.com") new BufferedReader(new InputStreamReader(url.openStream()))
8 股票的风险
股票风险 股票交易上的投机行为往往十分危险。假设某股票行为十分怪异,每天不是涨停(上涨10%)就是跌停(下跌10%)。假设上涨和下跌的概率均等(都是50%)。再假设交易过程没有任何手续费。某人在开始的时候持有总价值为x的该股股票,那么100个交易日后,他盈利的可能性是多少呢? 以下程序通过计算机模拟了该过程,一般的输出结果在0.3左右。请填写缺失的代码。 把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。 int N = 10000; int n = 0; for(int i=0; i<N; i++) { double value = 1000.0; for(int k=0; k<100; k++) { if(Math.random() > _______) value = value * 1.1; else value = value * 0.9; } if(____________) n++; } System.out.println(1.0*n/N); 0.5 value > 1000
9 基因牛的繁殖
基因牛 张教授采用基因干预技术成功培养出一头母牛,三年后,这头母牛每年会生出1头母牛, 生出来的母牛三年后,又可以每年生出一头母牛。如此循环下去,请问张教授n年后有多少头母牛? 以下程序模拟了这个过程,请填写缺失的代码。 把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。 public static class Cow { private int age; public Cow afterYear() { age++; return age > 2 ? new Cow() : ___________; } public static void showTotalCowNum(int n) { List<Cow> list = new ArrayList<Cow>(); list.add(new Cow()); for (int i = 0; i < n; i++) { int cowCount = list.size(); for (int j = 0; j < cowCount; j++) { Cow cow = list.get(j).afterYear(); // 填空 if (cow != null) { ________________; list.add(cow); } } } System.out.println(n + "年后,共有:" + list.size()); } } null cow.age++
10 括号的匹配
下面的代码用于判断一个串中的括号是否匹配 所谓匹配是指不同类型的括号必须左右呼应,可以相互包含,但不能交叉 例如: ..(..[..]..).. 是允许的 ..(...[...)....].... 是禁止的 对于 main 方法中的测试用例,应该输出: false true false false import java.util.*; public class A22 { public static boolean isGoodBracket(String s) { Stack<Character> a = new Stack<Character>(); for(int i=0; i<s.length(); i++) { char c = s.charAt(i); if(c==‘(‘) a.push(‘)‘); if(c==‘[‘) a.push(‘]‘); if(c==‘{‘) a.push(‘}‘); if(c==‘)‘ || c==‘]‘ || c==‘}‘) { if(____________________) return false; // 填空 if(a.pop() != c) return false; } } if(___________________) return false; // 填空 return true; } public static void main(String[] args) { System.out.println( isGoodBracket("...(..[.)..].{.(..).}...")); System.out.println( isGoodBracket("...(..[...].(.).){.(..).}...")); System.out.println( isGoodBracket(".....[...].(.).){.(..).}...")); System.out.println( isGoodBracket("...(..[...].(.).){.(..)....")); } } 请分析代码逻辑,并推测划线处的代码。 答案写在 “解答.txt” 文件中 注意:只写划线处应该填的内容,划线前后的内容不要抄写。
a.empty()
!a.empty()
以上是关于算法笔记_113:算法集训之代码填空题集一(Java)的主要内容,如果未能解决你的问题,请参考以下文章