第三届全国软件大赛java高职预赛题答案.docx
- 文档编号:25272681
- 上传时间:2023-06-06
- 格式:DOCX
- 页数:25
- 大小:39.19KB
第三届全国软件大赛java高职预赛题答案.docx
《第三届全国软件大赛java高职预赛题答案.docx》由会员分享,可在线阅读,更多相关《第三届全国软件大赛java高职预赛题答案.docx(25页珍藏版)》请在冰豆网上搜索。
第三届全国软件大赛java高职预赛题答案
1.土地测量
造成高房价的原因有许多,比如土地出让价格。
既然地价高,土地的面积必须仔细计算。
遗憾的是,有些地块的形状不规则,比如是如图【1.jpg】中所示的五边形。
一般需要把它划分为多个三角形来计算。
已知三边求三角形的面积需要用海伦定理,参见【2.jpg】
各条边长数据如下:
AB=52.1
BC=57.2
CD=43.5
DE=51.9
EA=33.4
EB=68.2
EC=71.9
根据这些数据求五边形地块的面积。
四舍五入到小数后两位。
只写结果,不要源代码!
答案写在“解答.txt”中,不要写在这里!
publicclasswdc
{
publicstaticvoidmain(String[]args)
{
doubleAB=52.1,
BC=57.2,
CD=43.5,
DE=51.9,
EA=33.4,
EB=68.2,
EC=71.9;
System.out.println(S(AB,EB,EA)+S(EB,BC,EC)+S(EC,CD,DE));
}
staticdoubleS(doublea,doubleb,doublec)
{
doubles=(a+b+c)/2;
returnMath.sqrt(s*(s-a)*(s-b)*(s-c));
}
}
2.猜生日
今年的植树节(2012年3月12日),小明和他的叔叔还有小伙伴们一起去植树。
休息的时候,小明的同学问他叔叔多大年纪,他叔叔说:
“我说个题目,看你们谁先猜出来!
”
“把我出生的年月日连起来拼成一个8位数(月、日不足两位前补0)正好可以被今天的年、月、日整除!
”
他想了想,又补充到:
“再给个提示,我是6月出生的。
”
根据这些信息,请你帮小明算一下,他叔叔的出生年月日。
答案写在“解答.txt”中,不要写在这里!
格式是年月日连成的8位数。
例如,如果是1948年6月12日,就写:
19480612
publicclasswdc
{
publicstaticvoidmain(String[]args)
{
//由题知年龄必在20120000与19000600之间
for(inti=2012*10000;i>=19000600;i=i-2012)//求2012的倍数
{
//能被12整除一定能被3整除
if(i%100<=31&&i/100%100==6&&i%12==0)//满足日期的数
{
System.out.println(i);
}
}
}
}
3.放麦子
你一定听说过这个故事。
国王对发明国际象棋的大臣很佩服,问他要什么报酬,大臣说:
请在第1个棋盘格放1粒麦子,在第2个棋盘格放2粒麦子,在第3个棋盘格放4粒麦子,在第4个棋盘格放8粒麦子,......后一格的数字是前一格的两倍,直到放完所有棋盘格(国际象棋共有64格)。
国王以为他只是想要一袋麦子而已,哈哈大笑。
当时的条件下无法准确计算,但估算结果令人吃惊:
即使全世界都铺满麦子也不够用!
请你借助计算机准确地计算,到底需要多少粒麦子。
答案写在“解答.txt”中,不要写在这里!
importjava.math.BigInteger;
publicclasswdc
{
publicstaticvoidmain(String[]args)
{
BigIntegersum=BigInteger.ZERO;
BigIntegeradd=BigInteger.ONE;
for(inti=1;i<=64;i++)
{
sum=sum.add(add);
//System.out.println(i+""+sum);
add=add.multiply(newBigInteger("2"));
//System.out.println((i+1)+"+"+add);
}
System.out.println(sum);
}
}
4.比酒量
有一群海盗(不多于20人),在船上比拼酒量。
过程如下:
打开一瓶酒,所有在场的人平分喝下,有几个人倒下了。
再打开一瓶酒平分,又有倒下的,再次重复......直到开了第4瓶酒,坐着的已经所剩无几,海盗船长也在其中。
当第4瓶酒平分喝下后,大家都倒下了。
等船长醒来,发现海盗船搁浅了。
他在航海日志中写到:
“......昨天,我正好喝了一瓶.......奉劝大家,开船不喝酒,喝酒别开船......”
请你根据这些信息,推断开始有多少人,每一轮喝下来还剩多少人。
如果有多个可能的答案,请列出所有答案,每个答案占一行。
格式是:
人数,人数,...
例如,有一种可能是:
20,5,4,2,0
答案写在“解答.txt”中,不要写在这里!
publicclasswdc
{
publicstaticvoidmain(String[]args)
{
inta,b,c,d;
doublesum;
for(a=20;a>=4;a--)
{
for(b=a-1;b>=3;b--)
{
for(c=b-1;c>=2;c--)
{
for(d=c-1;d>=1;d--)
{
sum=1.0/a+1.0/b+1.0/c+1.0/d;
if(sum==1)
System.out.println(a+","+b+","+c+","+d+","+"0");
}
}
}
}
}
}
5.第一个数字
以下的静态方法实现了:
把串s中第一个出现的数字的值返回。
如果找不到数字,返回-1
例如:
s="abc24us43"则返回2
s="82445adb5"则返回8
s="ab"则返回-1
publicstaticintgetFirstNum(Strings)
{
if(s==null||s.length()==0)return-1;
charc=s.charAt(0);
if(c>='0'&&c<='9')return__Integer.parseInt()___________;
//填空
returngetFirstNum(______________);//填空
}
请分析代码逻辑,并推测划线处的代码。
答案写在“解答.txt”文件中
注意:
只写划线处应该填的内容,划线前后的内容不要抄写。
importjava.util.Scanner;
publicclasswdc
{
publicstaticvoidmain(String[]args)
{
Scannerreader=newScanner(System.in);
Stringstring=reader.nextLine();
System.out.println(getFirstNum(string));
}
publicstaticintgetFirstNum(Strings)
{
if(s==null||s.length()==0)return-1;
charc=s.charAt(0);
if(c>='0'&&c<='9')
returnInteger.parseInt(String.valueOf(c));//填空
returngetFirstNum(s.substring
(1));//填空
}
}
6.扑克牌移动
下面代码模拟了一套扑克牌(初始排序A~K,共13张)的操作过程。
操作过程是:
手里拿着这套扑克牌,从前面拿一张放在后面,再从前面拿一张放桌子上,再从前面拿一张放在后面,....
如此循环操作,直到剩下最后一张牌也放在桌子上。
下面代码的目的就是为了求出最后桌上的牌的顺序。
初始的排列如果是A,2,3...K,则最后桌上的顺序为:
[2,4,6,8,10,Q,A,5,9,K,7,3,J]
importjava.util.*;
publicclassA23
{
publicstaticListmoveCard(Listsrc)
{
if(src==null)returnnull;
Listdst=newVector();
for(;;)
{
if(__________________)break;//填空
src.add(src.remove(0));
dst.add(__________________);//填空
}
returndst;
}
publicstaticvoidmain(String[]args)
{
Lista=newVector();
a.addAll(Arrays.asList("A","2","3","4","5","6","7","8","9","10","J","Q","K"));
System.out.println(moveCard(a));
}
}
请分析代码逻辑,并推测划线处的代码。
答案写在“解答.txt”文件中
注意:
只写划线处应该填的内容,划线前后的内容不要抄写。
importjava.util.*;
publicclasswdc
{
publicstaticListmoveCard(Listsrc)
{
if(src==null)returnnull;
Listdst=newVector();
for(;;)
{
if(src.size()==0)break;//填空
src.add(src.remove(0));
dst.add(src.remove(0));//填空
}
returndst;
}
publicstaticvoidmain(String[]args)
{
Lista=newVector();
a.addAll(Arrays.asList("A","2","3","4","5","6","7","8","9","10","J","Q","K"));
System.out.println(moveCard(a));
}
}
7.括号问题
下面的代码用于判断一个串中的括号是否匹配
所谓匹配是指不同类型的括号必须左右呼应,可以相互包含,但不能交叉
例如:
..(..[..]..)..是允许的
..(...[...)....]....是禁止的
对于main方法中的测试用例,应该输出:
false
true
false
false
importjava.util.*;
publicclassA22
{
publicstaticbooleanisGoodBracket(Strings)
{
Stack
for(inti=0;i { charc=s.charAt(i); if(c=='(')a.push(')'); if(c=='[')a.push(']'); if(c=='{')a.push('}'); if(c==')'||c==']'||c=='}') { if(____________________)returnfalse;//填空 if(a.pop()! =c)returnfalse; } } if(___________________)returnfalse;//填空 returntrue; } publicstaticvoidmain(String[]args) { System.out.println(isGoodBracket("...(..[.)..].{.(..).}...")); System.out.println(isGoodBracket("...(..[...].(.).){.(..).}...")); System.out.println(isGoodBracket(".....[...].(.).){.(..).}...")); System.out.println(isGoodBracket("...(..[...].(.).){.(..)....")); } } 请分析代码逻辑,并推测划线处的代码。 答案写在“解答.txt”文件中 注意: 只写划线处应该填的内容,划线前后的内容不要抄写。 importjava.util.*; publicclasswdc { publicstaticbooleanisGoodBracket(Strings) { Stack for(inti=0;i { charc=s.charAt(i); if(c=='(')a.push(')'); if(c=='[')a.push(']'); if(c=='{')a.push('}'); if(c==')'||c==']'||c=='}') { if(a.size()==0)returnfalse;//填空 if(a.pop()! =c)returnfalse; } } if(a.size()! =0)returnfalse;//填空 returntrue; } publicstaticvoidmain(String[]args) { System.out.println(isGoodBracket("...(..[.)..].{.(..).}...")); System.out.println(isGoodBracket("...(..[...].(.).){.(..).}...")); System.out.println(isGoodBracket(".....[...].(.).){.(..).}...")); System.out.println(isGoodBracket("...(..[...].(.).){.(..)....")); } } 8.手机尾号 30年的改革开放,给中国带来了翻天覆地的变化。 2011全年中国手机产量约为11.72亿部。 手机已经成为百姓的基本日用品! 给手机选个好听又好记的号码可能是许多人的心愿。 但号源有限,只能辅以有偿选号的方法了。 这个程序的目的就是: 根据给定的手机尾号(4位),按照一定的规则来打分。 其规则如下: 1.如果出现连号,不管升序还是降序,都加5分。 例如: 5678,4321都满足加分标准。 2.前三个数字相同,或后三个数字相同,都加3分。 例如: 4888,6665,7777都满足加分的标准。 注意: 7777因为满足这条标准两次,所以这条规则给它加了6分。 3.符合AABB或者ABAB模式的加1分。 例如: 2255,3939,7777都符合这个模式,所以都被加分。 注意: 7777因为满足这条标准两次,所以这条标准给它加了2分。 4.含有: 6,8,9中任何一个数字,每出现一次加1分。 例如4326,6875,9918都符合加分标准。 其中,6875被加2分;9918被加3分。 尾号最终得分就是每条标准的加分总和! 要求程序从标准输入接收数据,在标准输出上输出结果。 输入格式为: 第一行是一个整数n(<100),表示下边有多少输入行,接下来是n行4位一组的数据,就是等待计算加分的手机尾号。 输出格式为: n行整数。 例如,输入: 14 3045 0211 2345 6543 7777 8888 7878 7788 6688 2424 2244 9918 6789 8866 则输出: 0 0 5 6 8 12 3 3 5 1 1 3 8 5 注意: 请仔细调试! 您的程序只有能运行出正确结果的时候才有机会得分! 在评卷时使用的输入数据与试卷中给出的实例数据可能是不同的。 请把所有类写在同一个文件中,调试好后,存入与【考生文件夹】下对应题号的“解答.txt”中即可。 相关的工程文件不要拷入。 请不要使用package语句。 源程序中只能出现JDK1.5中允许的语法或调用。 不能使用1.6或更高版本。 importjava.util.Scanner; publicclasswdc { publicstaticvoidmain(String[]args) { Scannerscanner=newScanner(System.in); intnum=scanner.nextInt(); String[]strings=newString[num]; for(inti=0;i { Scannerscanner1=newScanner(System.in); strings[i]=scanner1.nextLine(); } for(inti=0;i { System.out.println(score(strings[i])); } } staticintscore(Strings) { intscore=0; intnum[]=newint[4]; charc[]=s.toCharArray(); for(inti=0;i<4;i++) { if(c[i]=='6'||c[i]=='9'||c[i]=='8') score=score+1; num[i]=Integer.parseInt(String.valueOf(c[i])); } if(c[0]==c[1]&&c[0]==c[2]&&c[0]==c[3])score=score+6+2; else { if((c[0]==c[1]&&c[0]==c[2])||(c[1]==c[2]&&c[2]==c[3]))score=score+3; if((c[0]==c[1]&&c[2]==c[3])||(c[0]==c[2]&&c[1]==c[3]))score=score+1; } if((num[0]==num[1]-1&&num[1]==num[2]-1&&num[2]==num[3]-1) ||num[0]==num[1]+1&&num[1]==num[2]+1&&num[2]==num[3]+1)score=score+5; returnscore; } } 9.密码发生器 在对银行账户等重要权限设置密码的时候,我们常常遇到这样的烦恼: 如果为了好记用生日吧,容易被破解,不安全;如果设置不好记的密码,又担心自己也会忘记;如果写在纸上,担心纸张被别人发现或弄丢了... 这个程序的任务就是把一串拼音字母转换为6位数字(密码)。 我们可以使用任何好记的拼音串(比如名字,王喜明,就写: wangximing)作为输入,程序输出6位数字。 变换的过程如下: 第一步.把字符串6个一组折叠起来,比如wangximing则变为: wangxi ming 第二步.把所有垂直在同一个位置的字符的ascii码值相加,得出6个数字,如上面的例子,则得出: 228202220206120105 第三步.再把每个数字“缩位”处理: 就是把每个位的数字相加,得出的数字如果不是一位数字,就再缩位,直到变成一位数字为止。 例如: 228=>2+2+8=12=>1+2=3 上面的数字缩位后变为: 344836,这就是程序最终的输出结果! 要求程序从标准输入接收数据,在标准输出上输出结果。 输入格式为: 第一行是一个整数n(<100),表示下边有多少输入行,接下来是n行字符串,就是等待变换的字符串。 输出格式为: n行变换后的6位密码。 例如,输入: 5 zhangfeng wangximing jiujingfazi woaibeijingtiananmen haohaoxuexi 则输出: 772243 344836 297332 716652 875843 注意: 请仔细调试! 您的程序只有能运行出正确结果的时候才有机会得分! 在评卷时使用的输入数据与试卷中给出的实例数据可能是不同的。 请把所有类写在同一个文件中,调试好后,存入与【考生文件夹】下对应题号的“解答.txt”中即可。 相关的工程文件不要拷入。 请不要使用package语句。 源程序中只能出现JDK1.5中允许的语法或调用。 不能使用1.6或更高版本。 importjava.util.Scanner; publicclasswdc { publicstaticvoidmain(String[]args) { Scannerscanner=newScanner(System.in); intnum=scanner.ne
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三 全国 软件 大赛 java 高职 预赛 答案