您的位置:首页 > 编程语言 > Java开发

2017蓝桥杯寒假训练计划(一)1.18

2017-01-19 20:57 671 查看
又报了蓝桥杯,昨天老师给了这些题目,晚上做完后网络不是很好,无法编辑文章,今天CSDN好像又挂了,所以这时候才补发。

代码填空题:

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));

思路:

Vector其实不是很懂,但是凭其他代码可以看出add和remove的作用,在第三个for循环中填写a.add(a.remove(0));实际上是将没有报三的孩子添加到Vector容器的尾部,即k=0,k=1时。该循环外的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)

思路:

如果是连续的数字就执行if中的语句,如果不连续,执行else中的语句,先输出t,再将t清空并加上当前位置的数字。

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


 

思路:

当心中的数比m小时,即猜的太大时,只需在v1和m-1中继续找即可,反之则在m+1和v2中找。

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 ___________________; //填空
}


答案:

c-'0'

getFirstNum(s.substring(1))


思路:

题目简单,但是切记将char c所代表的数字转换成实际意义的数字,即减去‘0‘或48。。。我在初做的时候忘记了,结果出来了个50有点懵,后来才发现错误。

结果填空题:

空瓶换汽水

浪费可耻,节约光荣。饮料店节日搞活动:不用付费,用3个某饮料的空瓶就可以换一瓶该饮料。刚好小明前两天买了2瓶该饮料喝完了,瓶子还在。他耍了个小聪明,向老板借了一个空瓶,凑成3个,换了一瓶该饮料,喝完还瓶!!
饮料店老板一统计,已经售出该饮料且未还瓶的有12345瓶,那么如果这些饮料的买主都如小明一样聪明,老板最多还需要送出多少瓶饮料呢?
显然答案是个正整数。
参考答案:
6172
思路:
12345/2≈6172,即最大数。

2.三人年龄
三个神秘蒙面人来访F博士。
博士询问他们年龄时,他们说:我们中年龄最小的不超过19岁。我们3人年龄总和为70岁。且我们三人年龄的乘积是所有可能情况中最大的。
请帮助F博士计算他们的年龄,从小到大排列,用逗号分开。 
参考答案:
19,25,26
思路:
填空题用三重for循环暴力破解即可,判断条件是i,j,k总和为70。且如果i*j*k>sum,则将sum替换成i*j*k(sum初始化为0)。

 3.考察团组成
某饭店招待国外考察团。按照标准,对领导是400元/人,随团职员200元/人,对司机50元/人。
考察团共36人,招待费结算为3600元,请问领导、职员、司机各几人。
答案是三个整数,用逗号分隔。
 
参考答案:
3,5,28
        思路:

        同样是多重循环暴力破解即可。



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  博客 java