java模拟试题
2017年java模拟试题
1.代码填空(满分3分)
以下程序打印出0~9的数字,请补充缺少的代码。
publicclassMyTest
{
publicstaticvoidf(intbegin,intend)
{if(begin>end)return;
System.out.println(begin);
f(begin+1,end);
}
publicstaticvoidmain(String[]args)
{
f(0,9);
}
}
2.代码填空(满分4分)
如果要把两个整型变量a、b的值交换,一般要采用一个中间变量做过渡,但也可以在不借助任何其它变量的情况下完成。试填写缺失的代码。
a=a^b;
b=___a^b______;
a=___a^b______;
3.代码填空(满分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_______________)
printf("*/n");
else
printf("%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=____newint[][]{{0,31,29,31,30,31,30,31,31,30 ,31,30,31},{0,31,28,31,30,31,30,31,31,30,31,30,31}}________ _________;
intflag=(year%4==0&&year%100!=0)||year%400==0?1:0;
intsum=day;
for(inti=0;i
sum+=days[flag][i];
}
returnsum;
}
5.代码填空(满分2分)
下列方法的目的是,找出1~n之间所有的平方数。试补全缺失的代码。
当n=10时,输出结果是:
149
当n=100时,输出结果是:
149162536496481
publicstaticvoidshowSqure(intn)
{
for(inti=0;i
{
for(intj=1;j<=i;j++)
{
if(i==___j*j__________)System.out.print(i+"");
}
}.
System.out.println();
}
6.代码填空(满分9分)
(a+b)的n次幂的.展开式中各项的系数很有规律,对于n=2,3,4时分别是:121,1331,14641。这些系数构成了著名的杨辉三角形:
1
11
121
1331
14641
15101051
下列的程序给出了计算第m层的第n个系数的计算方法,试完善之(m,n都从0算起)。
publicstaticintf(intm,intn)
{
if(m==0)return1;
if(n==0||n==m)return1;
returnf(m-1,n-1)+f(m-1,n);
}
7.代码填空(满分4分)
下面的代码将数组中的元素的位置颠倒过来:
比如:原来的元素是[1,2,3]
则颠倒后变为:[3,2,1]
publicstaticvoidreverse(int[]arrs)
{
for(inti=0,j=arrs.length-1;i<____j_____;i++,j--)
{
inttemp=arrs[i];
arrs[i]=arrs[j];
arrs[j]=temp;
}
}
8.程序设计(满分15分)
从键盘输入一个整数(1~20)
则以该数字为矩阵的大小,把1,2,3…n*n的数字按照顺时针螺旋的形式填入其中。例如:
输入数字2,则程序输出:
12
43
输入数字3,则程序输出:
894
765
输入数字4,则程序输出:
1234
1213145
1116156
10987
importjava.util.Scanner; publicclassTest8{
publicstaticvoidmain(String[]args){ intnum=1;
intcirCle[][]=newint[20][20]; intinputNum;
inti,j,line,t;
System.out.println("请输入一个正整数"); Scannerin=newScanner(System.in); inputNum=in.nextInt();
line=inputNum;
for(t=0;t for(i=t,j=t;j cirCle[i][j]=num; num++; for(j=j-1,i=i+1;i num++; } for(j=j-1,i=i-1;j>=t;j--){ cirCle[i][j]=num; num++; } for(j=j+1,i=i-1;i>t;i--){ cirCle[i][j]=num; num++; } } for(intm=0;m for(intn=0;n System.out.print(cirCle[m][n]+""); } System.out.println(); } } } 9.程序设计(满分9分) 从键盘输入一个日期,格式为yyyy-M-d 要求计算该日期与1949年10月1日距离多少天 例如: 用户输入了:1949-10-2 程序输出:1 用户输入了:1949-11-1 程序输出:31 importjava.text.ParseException; importjava.text.SimpleDateFormat; importjava.util.Date; importjava.util.Scanner; publicclassTest{ publicstaticvoidmain(String[]args){ SimpleDateFormatsf=newSimpleDateFormat("yyyy-MM-dd"); Dated=newDate(); Stringd1="1949-10-1"; Datea=newDate(); System.out.println("请输入一个日期以(YYYY-MM-DD)格式输入:"); Scannersc=newScanner(System.in); Strings=sc.nextLine(); try{ d=sf.parse(d1); a=sf.parse(s); }catch(ParseExceptione1){ e1.printStackTrace(); } longx=a.getTime()-d.getTime(); System.out.println(x/1000/(24*60*60)); } } 10.程序设计(满分20分) 任意一个5位数,比如:34256,把它的各位数字打乱,重新排列,可以得到一个最大的数:65432,一个最小的数23456。求这两个数字的差,得:41976,把这个数字再次重复上述过程(如果不足5位,则前边补0)。如此往复,数字会落入某个循环圈(称为数字黑洞)。 比如,刚才的数字会落入:[82962,75933,63954,61974]这个循环圈。 请编写程序,找到5位数所有可能的循环圈,并输出,每个循环圈占1行。其中5位数全都相同则循环圈为[0],这个可以不考虑。循环圈的输出格式仿照: [82962,75933,63954,61974] 其中数字的先后顺序可以不考虑。 importjava.util.Arrays; publicclassMyTest{ publicstaticvoidmain(Stringargs[]){ intf=Sort(array(34256)); intx=Sort(array(34256)); for(inti=0;i<4;i++){ x=Sort(array(x)); System.out.print(x+""); } } staticint[]array(intn){ inta[]=newint[5]; inti=0; intm=n; while(i<5){ a[i]=m%10; if(m%10==0) a[i]=0; m/=10; i++; } returna; } staticintSort(inta[]){ Arrays.sort(a); Stringmin=""; for(inti=0;i<5;i++){ min=min+String.valueOf(a[i]); } intMin=Integer.parseInt(min); StringBuffersb=newStringBuffer(min).reverse(); Stringmax=newStringBuffer(sb).toString(); intMax=Integer.parseInt(max); intc=Max-Min; returnc; } }