第五届蓝桥杯全国软件设计大赛
2013年校内选拔赛Java题目
一、考生注意:
(1)【结果填空题】要求参赛选手根据题目描述直接填写结果。求解方式不限。不要求源代码。
把答案存入【考生文件夹】下对应题号的文件中即可。
(2)【代码填空题】要求参赛选手在弄清给定代码工作原理的基础上填写缺失的部分,使得程序逻辑正确、完整。所填写的代码不超过一条语句(即中间不能出现分号)。
把填空的答案(仅填空处的答案,不包括题面已存在的代码)存入【考生文件夹】下对应题号的文件中中即可。
(3)【编程题】要求选手设计的程序对于给定的输入能给出正确的输出结果。考生的程序只有能运行出正确结果的时候才有机会得分。注意:在评卷时使用的输入数据与试卷中给出的实例数据可能是不同的。选手的程序必须是通用的,不能只对试卷中给定的数据有效。
对每个编程题目,要求考生把所有方法写在一个文件中。调试好后,存入与【考生文件夹】下对应题号的文件中中即可。相关的工程文件不要拷入。
二、操作准备:
(1)在“2013Java校内选拔赛文件”下建立【考生文件夹】,名字为“学号+姓名”,例如你的姓名为:李明,学号是2012999001,则你的【考生文件夹】为:2012999001李明。
(2)把“2013Java校内选拔赛文件”下的全部文本文件移动到你的【考生文件夹】中。
三、考试内容:
1.【结果填空题】(5分)
问题描述:
1949年的国庆节(10月1日)是星期六。今年(2013)的国庆节是星期二。
那么,从建国到现在,有10次国庆节正好是星期一。分别为哪几年?要求写出分别是哪几年,每一年作为一行。
只要答案,不限手段!可以用windows日历,windows计算器等工具。当然,也可以编程!不用提交源代码!
把答案放到文件t1.txt中即可。
2. 【结果填空题】(5分)
问题描述:
625这个数字很特别,625的平方等于390625,刚好其末3位是625本身。除了625,还有其它的3位数有这个特征吗?
请寻找所有这样的2位数和3位数:2位数的平方的末2位是这个数字本身;3位数的平方的末3位是这个数字本身。
输出结果按如下格式输出,要求从小到大,每个找到的数字占一行。比如找到那个625就输出为:
625*626=390625
只要答案,不限手段!当然,也可以编程!不用提交源代码!
把答案放到文件t2.txt中即可。
3.【代码填空题】(5分)
问题描述:三部排序
一般的排序有许多经典算法,如快速排序、希尔排序等。
但实际应用时,经常会或多或少有一些特殊的要求。我们没必要套用那些经典算法,可以根据实际情况建立更好的解法。
比如,对一个整型数组中的数字进行分类排序:
使得负数都靠左端,正数都靠右端,0在中部。注意问题的特点是:负数区域和正数区域内并不要求有序。可以利用这个特点通过1次线性扫描就结束战斗!!
以下的程序实现了该目标。
static void sort(int[] x)
{
int p = 0;
int left = 0;
int right = x.length-1;
while(p<=right){
if(x[p]<0){
int t = x[left];
x[left] = x[p];
x[p] = t;
left++;
p++;
}
else if(x[p]>0){
int t = x[right];
x[right] = x[p];
x[p] = t;
right--;
}
else{
_________________________; //代码填空位置
}
}
}
如果给定数组:
25,18,-2,0,16,-5,33,21,0,19,-16,25,-3,0
则排序后为:
-3,-2,-16,-5,0,0,0,21,19,33,25,16,18,25
请分析代码逻辑,并推测划线处的代码,把答案放到文件t3.txt中即可。
注意:仅把缺少的代码作为答案,千万不要填写多余的代码、符号或说明文字!!
4.【代码填空题】(5分)
问题描述:有理数类
有理数就是可以表示为两个整数的比值的数字。一般情况下,我们用近似的小数表示。但有些时候,不允许出现误差,必须用两个整数来表示一个有理数。
这时,我们可以建立一个“有理数类”,下面的代码初步实现了这个目标。为了简明,它只提供了加法和乘法运算。
class Rational
{
private long ra;
private long rb;
private long gcd(long a, long b){
if(b==0) return a;
return gcd(b,a%b);
}
public Rational(long a, long b){
ra = a;
rb = b;
long k = gcd(ra,rb);
if(k>1){ //需要约分
ra /= k;
rb /= k;
}
}
// 加法
public Rational add(Rational x){
return ________________________________________; //填空位置
}
// 乘法
public Rational mul(Rational x){
return new Rational(ra*x.ra, rb*x.rb);
}
public String toString(){
if(rb==1) return "" + ra;
return ra + "/" + rb;
}
}
使用该类的示例:
Rational a = new Rational(1,3);
Rational b = new Rational(1,6);
Rational c = a.add(b);
System.out.println(a + "+" + b + "=" + c);
请分析代码逻辑,并推测划线处的代码,把答案放到文件t4.txt中即可。
注意:仅把缺少的代码作为答案,千万不要填写多余的代码、符号或说明文字!!
5. 问题描述(20分)
Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。
当n比较大时,Fn也非常大,现在我们想知道,Fn除以1000的余数是多少。请编写程序实现。
输入格式
输入一个整数n。
输出格式
输出一行,包含一个整数,表示Fn除以1000的余数。
(注意不用任何多余的输入和输出提示)
样例输入 |
样例输入 |
样例输入 |
样例输入 |
10 |
22 |
100 |
10000 |
样例输出 |
样例输出 |
样例输出 |
样例输出 |
55 |
711 |
75 |
875 |
数据规模与约定:1 <= n <= 10000。
把答案放到文件t5.txt中即可。
6. 问题描述(20分)
考虑方程式:a^3 + b^3 = c^3 + d^3
其中:“^”表示乘方。a、b、c、d是互不相同的小于30的正整数。
这个方程有很多解。比如:
a = 1,b=12,c=9,d=10 就是一个解。因为:1的立方加12的立方等于1729,而9的立方加10的立方也等于1729。
当然,a=12,b=1,c=9,d=10 显然也是解。
如果不计abcd交换次序的情况,这算同一个解。
请编写程序实现如下任务:找到所有小于30的不同的正整数解。把a b c d按从小到大排列,用逗号分隔,每个解占用1行。比如,刚才的解输出为:
1,9,10,12
不同解间的顺序可以不考虑。
把答案放到文件t6.txt中即可。
7. 问题描述(20分)
123321是一个非常特殊的数,它从左边读和从右边读是一样的。
输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。
输入格式
输入一行,包含一个正整数n。
输出格式
按从小到大的顺序输出满足条件的整数,每个整数占一行。
样例输入 |
样例输入 |
52 |
50 |
样例输出 |
样例输出 |
899998 989989 998899 |
799997 889988 898898 979979 988889 997799 |
数据规模和约定:1<=n<=54。
把答案放到文件t7.txt中即可。
8. 问题描述(20分)
请编写一个方法 void fun(int m, int k, int xx[]),该方法的功能是: 将大于整数 m 且紧靠 m 的 k 个素数存入数组 xx 传回。
例如, 若输入17, 5, 则应输出:19, 23, 29, 31, 37。
把答案放到文件t8.txt中即可。