蓝桥杯模拟试题java本科组试题及答案Word格式.docx
《蓝桥杯模拟试题java本科组试题及答案Word格式.docx》由会员分享,可在线阅读,更多相关《蓝桥杯模拟试题java本科组试题及答案Word格式.docx(12页珍藏版)》请在冰豆网上搜索。
}
}
}
newRandom().nextInt(6-k)//(int)(Math.random()*(6-k))
2.代码填空(满分3分)
不同进制的数值间的转换是软件开发中很可能会遇到的常规问题。
下面的代码演示了如何把键盘输入的3进制数字转换为十进制。
试完善之。
BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));
Strings=br.readLine();
intn=0;
for(inti=0;
s.length();
i++)
charc=s.charAt(i);
if(c<
'
0'
||c>
'
2'
)thrownewRuntimeException("
Formaterror"
);
n=______________________;
System.out.println(n);
3*n+c-'
3.代码填空(满分4分)
有如下程序,完成的功能为:
找出数组中的最大元素。
请填写程序的中空白,使程序运行正确。
publicclasstest
publicstaticvoidmain(String[]args){
intarray[]={0,34,67,90,21,-9,98,1000,-78};
System.out.println(newtest().findMax(array,0));
publicintfindMax(intarray[],intindex)
if(array==null||array.length==0)
return0;
intmax=array[0];
while(index<
array.length-1)
max=____________________
if(max<
array[index])max=array[index];
returnmax;
max>
array[++index]?
max:
array[index]
4.代码填空(满分5分)
电视台开宝箱节目:
打进电话的人可以开启一个宝箱。
箱子中有一件礼品。
礼品是iphone的机率为1/12;
是mp3的机率为1/5;
是洗衣粉的机率为1/2;
剩余是KFC优惠券。
每次打进电话,宝箱会重置。
以下程序模拟了该抽奖过程。
请填写缺失的部分。
publicstaticvoidmain(String[]args)
inti=(int)(Math.random()*_____________);
if(i<
5){
System.out.println("
恭喜中了:
iphone手机"
}elseif(i<
17){
mp3"
}elseif(i<
47){
洗衣粉"
}else{
KFC优惠券"
60
5.代码填空(满分6分)
下列代码求出一个二进制串中连续的1或连续的0出现的最大次数。
请填缺失代码。
例如:
s=“101100111100011”
则返回:
4
又例如:
s=”0111100000”
5
publicstaticintgetMaxContinuity(Strings)
intmax_1=0;
intmax_0=0;
intn_1=0;
//当前1连续的次数
intn_0=0;
//当前0连续的次数
for(inti=0;
if(s.charAt(i)=='
)
{
n_0++;
________;
}
else
n_1++;
_________;
if(n_1>
max_1)max_1=n_1;
if(n_0>
max_0)max_0=n_0;
returnmax_1>
max_0?
max_1:
max_0);
n_1=0n_0=0
6.代码填空(满分9分)
下列代码把16进制表示的串转换为3进制表示的串。
x=“5”
“12”
x=”F”
“120”
privatestaticintgetRealValue(charx)
if(x>
&
&
x<
9'
)returnx-'
a'
f'
+10;
return0;
publicstaticStringjin_zhi_16_3(Stringx)
intn=0;
//累加真值
x.length();
n=_________+getRealValue(x.charAt(i));
//填空
Stringt="
for(;
if(n==0)break;
t=(n%3)+t;
_____________;
returnt;
16*nn/=3
7.代码设计(满分5分)
625这个数字很特别,625的平方等于390625,刚好其末3位是625本身。
除了625,还有其它的3位数有这个特征吗?
请编写程序,寻找所有这样的3位数:
它的平方的末3位是这个数字本身。
输出结果中,从小到大,每个找到的数字占一行。
比如那个625就输出为:
625
publicstaticvoidmain(String[]args){
inttemp=0;
for(inti=100;
i<
=999;
++i){
temp=i*i;
temp%=1000;
if(temp==i)System.out.println(i);
8.代码设计(满分11分)
考虑方程式:
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的不同的正整数解。
把abcd按从小到大排列,用逗号分隔,每个解占用1行。
比如,刚才的解输出为:
1,9,10,12
不同解间的顺序可以不考虑。
int[]arr=newint[31];
for(inti=1;
=30;
arr[i]=(int)i*i*i;
for(inta=1;
a<
=27;
++a){
for(intb=a+1;
b<
=28;
++b){
for(intc=b+1;
c<
=29;
++c){
for(intd=c+1;
d<
++d){
if((arr[a]+arr[d])==(arr[b]+arr[c]))
System.out.println(a+"
"
+b+"
+c+"
+d);
}
}
}
9.代码设计(满分18分)
整数的分划问题。
如,对于正整数n=6,可以分划为:
6
5+1
4+2,4+1+1
3+3,3+2+1,3+1+1+1
2+2+2,2+2+1+1,2+1+1+1+1
1+1+1+1+1+1+1
现在的问题是,对于给定的正整数n,编写算法打印所有划分。
用户从键盘输入n(范围1~10)
程序输出该整数的所有划分。
importjava.util.*;
publicclassTest{
privatestaticLinkedList<
String>
str=newLinkedList<
();
publicstaticvoidmain(String[]args){
intinput=10;
Test.integerDivide(input,input);
publicstaticvoidintegerDivide(intlimit,intmax){
if(1==max){
str.add(String.valueOf
(1));
formatResult(str);
str.removeLast();
return;
if(0==max){
for(inti=limit;
i>
=1;
--i){
if(i<
=max){
str.add(String.valueOf(i));
integerDivide(i,max-i);
str.removeLast();
publicstaticvoidformatResult(LinkedList<
s){
System.out.print(s.getFirst());
for(inti=1;
i<
s.size();
i++)
System.out.print("
+"
+s.get(i));
System.out.println();
10.代码设计(满分20分)
一个N位的十进制正整数,如果它的每个位上的数字的N次方的和等于这个数本身,则称其为花朵数。
当N=3时,153就满足条件,因为1^3+5^3+3^3=153,这样的数字也被称为水仙花数(其中,“^”表示乘方,5^3表示5的3次方,也就是立方)。
当N=4时,1634满足条件,因为1^4+6^4+3^4+4^4=1634。
当N=5时,92727满足条件。
实际上,对N的每个取值,可能有多个数字满足条件。
449177399146038697307
128468643043731391252
程序的任务是:
求N=21时,所有满足条件的花朵数。
这个整数有21位,它的各个位数字的21次方之和正好等于这个数本身。
如果满足条件的数字不只有一个,请从小到大输出所有符合条件的数字,每个数字占一行。
因为这个数字很大,请注意解法时间上的可行性。
要求程序在3分钟内运行完毕。
importjava.math.BigInteger;
importjava.util.Arrays;
publicclassTest{
privatestaticintnum=21;
privatestaticBigInteger[]table=newBigInteger[10];
privatestaticBigInteger[]store=newBigInteger[1000];
privatestaticintnTotal=0;
privatestaticint[]nums;
for(inti=0;
10;
i++)
table[i]=BigInteger.valueOf(i).pow(num);
//longtime=System.currentTimeMillis();
for(inti=0;
nums=newint[num];
for(intj=0;
j<
10;
j++)
find(nums,0,j);
if(0==nTotal)
System.out.println("
没有符合条件的数!
else{
Arrays.sort(store,0,nTotal);
for(inti=0;
nTotal;
System.out.println(store[i]);
//time=System.currentTimeMillis()-time;
//System.out.println(time/1000.0+"
s"
publicstaticvoidfind(int[]nums,intlevel,intnum){
nums[level]=num;
if(level==nums.length-1){
BigIntegerbig=sum(nums);
//当level为20时,表示nums数组下标为20即21位数字满后求和;
int[]temp=getArray(big);
//将得到的21位数和转化为整形数组;
并返回;
if(check(nums,temp))//测试是否是21位,并将数组复制给nums数组;
store[nTotal]=big;
//保存big数;
nTotal++;
return;
}
for(inti=num;
i++)//递归;
查找21位数字符合条件的数;
find(nums,level+1,i);
publicstaticbooleancheck(int[]a1,int[]a2){
if(a1.length!
=a2.length)
returnfalse;
Arrays.sort(a2);
returnArrays.equals(a1,a2);
/**
*449177399146038697307
128468643043731391252
*得到nums数组的数做为table下标的数的和。
*@paramnums
*@return
*/
publicstaticBigIntegersum(int[]nums){
BigIntegersum=BigInteger.ZERO;
nums.length;
sum=sum.add(table[nums[i]]);
returnsum;
*将BigInteger转化为int[]类型数据;
*@parambig
publicstaticint[]getArray(BigIntegerbig){
Strings=String.valueOf(big);
char[]ch=s.toCharArray();
int[]res=newint[ch.length];
ch.length;
res[i]=ch[i]-'
returnres;