有n个孩子站成一圈,从第一个孩子开始顺时针方向报数,报到3的人出列,下一个人继续从1报数,直到最后剩下一个孩子为止。问剩下第几个孩子。下面的程序以10个孩子为例,模拟了这个过程,请完善之(提示:报数的过程被与之逻辑等价的更容易操作的过程所代替)。
Vector a = new Vector(); for(int i=1; i<=10; i++) {undefined a.add("第" + i + "个孩子"); } for(;;) {undefined if(a.size()==1) break; for(int k=0; k<2; k++) ________________; a.remove(0); } System.out.println(a);
填写:
a.add(a.remove(0)
结果:
第4个孩子
下列代码运行结果为:
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);
结果:
12345
23456
89
23456789
填写:(注意没有;)
t = "" + s.charAt(i)
package action;
public class demo2 {
public static void main(String[] args) {
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);
t = "" + s.charAt(i);
}
}
System.out.println(t);
}
}
很多人都玩过这个游戏:甲在心中想好一个数字,乙来猜。每猜一个数字,甲必须告诉他是猜大了,猜小了,还是刚好猜中了。下列的代码模拟了这个过程。其中用户充当甲的角色,计算机充当乙的角色。为了能更快地猜中,计算机使用了二分法。 阅读分析代码,填写缺失的部分。
把填空的答案(仅填空处的答案,不包括题面)存入考生文件夹下对应题号的“解答.txt”中即可。
System.out.println("请在心中想好一个数字(1~100),我来猜"); System.out.println("我每猜一个数字,你要告诉我是“猜大了”,“猜小了”,还是“猜中”"); Scanner scan = new Scanner(System.in); int v1 = 1; int v2 = 100; for(;;) {undefined 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
我们把“cba”称为“abc”的反转串。 求一个串的反转串的方法很多。下面就是其中的一种方法,代码十分简洁(甚至有些神秘),请聪明的你通过给出的一点点线索补充缺少的代码。
把填空的答案(仅填空处的答案,不包括题面)存入考生文件下对应题号的“解答.txt”中即可。
public static String reverseString(String x) {undefined if(x==null || x.length()<2) return x; return ____________________ + x.charAt(0);
}
填空:
reverseString(x.substring(1))+ x.charAt(0)
过程:
reverseString("abcde")=reverseString("bcde")+a =edcba
reverseString("bcde")=reverseString("cde")+b =edcb
reverseString("cde")=reverseString("de")+c =edc
reverseString("de")=reverseString("e")+d =ed
以下的静态方法实现了:把串s中第一个出现的数字的值返回。 如果找不到数字,返回-1
例如: s = "abc24us43" 则返回2 s = "82445adb5" 则返回8 s = "ab" 则返回-1
public static int getFirstNum(String s) {undefined if(s==null || s.length()==0) return -1; char c = s.charAt(0); if(c>='0' && c<='9') return _____________; //填空 return ___________________; //填空 }
请分析代码逻辑,并推测划线处的代码。
答案写在 “解答.txt” 文件中
注意:只写划线处应该填的内容,划线前后的内容不要抄写。
结果:
2
过程:
(例1):
getFirstNum("abc24us43")=getFirstNum("bc24us43") = 2
getFirstNum("bc24us43")=getFirstNum("c24us43") = 2
getFirstNum("c24us43")=getFirstNum("24us43") = 2
(例2):
getFirstNum("ab")=getFirstNum("a") = -1
import java.util.Scanner;
public class Main {
public static int getFirstNum(String s)
{
if(s==null || s.length()==0) return -1;//如果找不到数字,返回-1
char c = s.charAt(0);
if(c>='0' && c<='9') return c-'0'; //填空 //第一个出现的数字的值返回
return getFirstNum(s.substring(1)); //填空 //递归,如果找不到,继续找
}
public static void main(String[] args) {
System.out.println(getFirstNum("abc24us43"));
}
}
以下程序打印出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;
package action;
public class demo2 {
public static void f(int begin, int end) {
if(begin > end) return;
System.out.println(begin);
f(begin + 1, end);
}
public static void main(String[] args) {
f(0, 9);
}
}
到这里,蓝桥的模型提基本上都练习过了,希望能对大家的比赛有所帮助。