全国软件大赛模拟题及参考答案Word格式文档下载.docx
- 文档编号:19688605
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:11
- 大小:19.38KB
全国软件大赛模拟题及参考答案Word格式文档下载.docx
《全国软件大赛模拟题及参考答案Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《全国软件大赛模拟题及参考答案Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。
如果要把两个整型变量a、b的值交换,一般要采用一个中间变量做过渡,但也可
以在不借助任何其它变量的情况下完成。
试填写缺失的代码。
a=a^b;
b=_________;
b=a^b;
a=_________;
3.
许多人都曾经玩过“拍七”游戏。
规则是:
大家依次从1开始顺序数数,数到含
有7或7的倍数的要拍手或其它规定的方式表示越过(比如:
7,14,17等都不能数
出),下一人继续数下面的数字。
违反规则者受罚。
下面的程序模拟这个过程,
拍7的情况输出“*”,请完善之。
for(inti=1;
i<
100;
i++)
if(i%7==0)
printf("
*/n"
);
elseif(___________________)i%10==7||i/10==7
else
%d/n"
i);
4.
代码填空(满分5分)
下面的静态方法的目的是求出某个日期是该年度的第几天。
试完善之。
如果传入:
year=1980,month=1,day=1
则返回1
year=1980,month=2,day=1
则返回32
publicstaticintgetDayOfYear(intyear,intmonth,intday)
int[][]days=_____________________;
{{0,31,28,31,30,31,30,31,31,30,31,30,31},
{0,31,29,31,30,31,30,31,31,30,31,30}}
intflag=(year%4==0&
&
year%100!
=0)||year%400==0?
1:
0;
intsum=day;
for(inti=0;
i<
month;
i++)
sum+=days[flag][i];
}
returnsum;
5.
代码填空(满分2分)
下列方法的目的是,找出1~n之间所有的平方数。
试补全缺失的代码。
当n=10时,输出结果是:
149
当n=100时,输出结果是:
149162536496481
publicstaticvoidshowSqure(intn)
n;
for(intj=1;
j<
=i;
j++)
if(i==_____________)System.out.print(i+"
"
j*j
System.out.println();
6.
代码填空(满分9分)
(a+b)的n次幂的展开式中各项的系数很有规律,对于n=2,3,4时分别是:
12
1,1331,14641。
这些系数构成了著名的杨辉三角形:
1
1
1
1
2
3
3
4
6
4
5
10
5
下列的程序给出了计算第m层的第n个系数的计算方法,试完善之(m,n都从0算
起)。
publicstaticintf(intm,intn)
if(m==0)return1;
if(n==0||n==m)return1;
return__________________________;
f(m-1,n-1)+f(m-1,n)
7.
下面的代码将数组中的元素的位置颠倒过来:
比如:
原来的元素是[1,2,3]
则颠倒后变为:
[3,2,1]
publicstaticvoidreverse(int[]arrs)
for(inti=0,j=arrs.length-1;
i<
_________;
i++,j--)
arrs.length/2
inttemp=arrs[i];
arrs[i]=arrs[j];
arrs[j]=temp;
8.
程序设计(满分15分)
从键盘输入一个整数(1~20)
则以该数字为矩阵的大小,把1,2,3…n*n的数字按照顺时针螺旋的形式填入其
中。
例如:
输入数字2,则程序输出:
12
43
输入数字3,则程序输出:
123
894
765
输入数字4,则程序输出:
4
12
13
14
5
11
16
15
6
9
8
7
importjava.util.Scanner;
publicclassMyTest{
Scannerin=newScanner(System.in);
intn=in.nextInt();
intvalue[][]=newint[n][n];
intdirection=1;
//1向右,-1向左,2向上,-2向下
introw=0;
intcol=0;
for(inti=0;
n*n;
i++){
if(value[row][col]==0){
value[row][col]=i+1;
if(direction==1){//向右
if(col+1<
n&
value[row][col+1]==0){
col++;
}else{
direction=-2;
row++;
}//向下
elseif(direction==-2){
if(row+1<
value[row+1][col]==0){
direction=-1;
col--;
elseif(direction==-1){
if(col-1>
=0&
value[row][col-1]==0){
direction=2;
row--;
else{
if(row-1>
value[row-1][col]==0){
direction=1;
for(intj=0;
j<
j++){
if(j==0)
System.out.print(value[i][j]);
System.out.print("
+value[i][j]);
System.out.println();
9.
程序设计(满分9分)
从键盘输入一个日期,格式为yyyy-M-d
要求计算该日期与1949年10月1日距离多少天
用户输入了:
1949-10-2
程序输出:
1949-11-1
31
importjava.text.DateFormat;
importjava.text.SimpleDateFormat;
importjava.util.Date;
Stringdate=in.next();
DateFormatdf=newSimpleDateFormat("
yyyy-M-d"
StringoldDate="
1949-10-1"
;
try{
Dated=df.parse(date);
Dated2=df.parse(oldDate);
System.out.println((d.getTime()-d2.getTime())/
(24*3600*1000));
}catch(Exceptione){
System.out.println("
輸入的不是有效日期"
10.程序设计(满分20分)
任意一个5位数,比如:
34256,把它的各位数字打乱,重新排列,可以得到一
个最大的数:
65432,一个最小的数23456。
求这两个数字的差,得:
41976,
把这个数字再次重复上述过程(如果不足5位,则前边补0)。
如此往复,数字会
落入某个循环圈(称为数字黑洞)。
比如,刚才的数字会落入:
[82962,75933,63954,61974]这个循环圈。
请编写程序,找到5位数所有可能的循环圈,并输出,每个循环圈占1行。
其中5
位数全都相同则循环圈为[0],这个可以不考虑。
循环圈的输出格式仿照:
[82962,75933,63954,61974]
其中数字的先后顺序可以不考虑。
importjava.util.ArrayList;
importjava.util.Arrays;
importjava.util.List;
//保存查找到的环
staticList<
List<
Integer>
>
allList=new
ArrayList<
();
//遍历所有的数字
for(inta=0;
a<
=9;
a++){
for(intb=0;
b<
=a;
b++){
for(intc=0;
c<
=b;
c++){
for(intd=0;
d<
=c;
d++){
for(inte=0;
e<
=d;
e++){
inttemp=
a*10000+b*1000+c*100+d*10+e;
List<
list=findRing(temp);
if(list!
=null){
allList.add(list);
//输出结果
for(List<
list:
allList){
["
list.size();
inttemp=list.get(i).intValue();
System.out.print(temp);
if(i!
=list.size()-1)
"
]"
/*
*得到最大数,根据32321得到最大数是33221
*/
staticintgetMax(intnumber){
Stringtemp=String.valueOf(number);
chartempCharArray[]=temp.toCharArray();
Arrays.sort(tempCharArray);
StringBuffersb=newStringBuffer(newString
(tempCharArray));
sb.reverse();
5-sb.length();
sb.append('
0'
returnInteger.parseInt(sb.toString());
*得到最小数,根据32321得到最小数是12233
staticintgetMin(intnumber){
returnInteger.parseInt(newString(tempCharArray));
*根据某个数找环
findRing(intnumber){
list=newArrayList<
inttemp=number;
while(true){
temp=getNext(temp);
//一定存在于环中
if(temp==0||exists(temp)){
returnnull;
intindex=find(list,temp);
if(index!
=-1){
returnlist.subList(index,list.size
());
list.add(temp);
*得到最大值-最小值
staticintgetNext(intnumber){
returngetMax(number)-getMin(number);
*查找某个数字是否在某个链表中
staticintfind(List<
list,intnumber){
intindex=-1;
if(list.get(i).intValue()==number){
index=i;
break;
returnindex;
*是否存在于已有的环中
staticbooleanexists(intnumber){
if(find(list,number)>
-1)
returntrue;
returnfalse;
11.程序设计(满分9分)
当你输入信用卡号码的时候,有没有担心输错了而造成损失呢?
其实可以不必这
么担心,因为并不是一个随便的信用卡号码都是合法的,它必须通过Luhn算法
来验证通过。
该校验的过程:
1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。
2、从卡号最后一位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数
,则将其减去9),再求和。
3、将奇数位总和加上偶数位总和,结果应该可以被
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 全国 软件 大赛 模拟 参考答案