全国软件大赛模拟题及参考答案Word格式文档下载.docx

上传人:b****6 文档编号:19688605 上传时间:2023-01-08 格式:DOCX 页数:11 大小:19.38KB
下载 相关 举报
全国软件大赛模拟题及参考答案Word格式文档下载.docx_第1页
第1页 / 共11页
全国软件大赛模拟题及参考答案Word格式文档下载.docx_第2页
第2页 / 共11页
全国软件大赛模拟题及参考答案Word格式文档下载.docx_第3页
第3页 / 共11页
全国软件大赛模拟题及参考答案Word格式文档下载.docx_第4页
第4页 / 共11页
全国软件大赛模拟题及参考答案Word格式文档下载.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

全国软件大赛模拟题及参考答案Word格式文档下载.docx

《全国软件大赛模拟题及参考答案Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《全国软件大赛模拟题及参考答案Word格式文档下载.docx(11页珍藏版)》请在冰豆网上搜索。

全国软件大赛模拟题及参考答案Word格式文档下载.docx

如果要把两个整型变量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

10 

下列的程序给出了计算第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

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、将奇数位总和加上偶数位总和,结果应该可以被

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 政史地

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1