2019-2020年java基础50道经典练习题及答案_第1页
2019-2020年java基础50道经典练习题及答案_第2页
2019-2020年java基础50道经典练习题及答案_第3页
2019-2020年java基础50道经典练习题及答案_第4页
2019-2020年java基础50道经典练习题及答案_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

沃克IT教育JAVA基础编程练习题

整理:Lemon

【程序1]

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对

兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,

问每个月的兔子对数为多少?

程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....

publicclassProgl{

publicstaticvoidmain(String[]args){

intn=10;

System.out.println("第"+n+"个月兔子总数为"+fun(n));

}

privatestaticintfun(intn){

if(n==l||n==2)

return1;

else

returnfun(n-1)+fun(n-2);

【程序2】

题目:判断101-200之间有多少个素数,并输出所有素数。

程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),

如果能被整除,则表明此数不是素数,反之是素数。

publicclassProg2{

publicstaticvoidmain(String[]args){

intm=1;

intn=1000;

intcount=0;

〃统计素数个数

for(inti=m;i<n;i++){

if(isPrime(i)){

count++;

System.out.print(i+"");

if(count%10==0){

System.out.printin();

System,out.println();

System.out.println("在"+m+"和"+n+"之间共有"+count+"

个素数”);

//判断素数

privatestaticbooleanisPrime(intn){

booleanflag=true;

if(n==l)

flag=false;

else{

for(inti=2;i<=Math.sqrt(n);i++){

if((n%i)==O||n==l){

flag=false;

break;

}

else

flag=true;

}

}

returnflag;

【程序3】

题目:打印出所有的“水仙花数",所谓"水仙花数”是指一个三位数,

其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因

为153=1的三次方+5的三次方+3的三次方。

程序分析:利用for循环控制100-999个数,每个数分解出个位,

十位,百位。

publicclassProg3{

publicstaticvoidmain(String[]args){

for(inti=100;i<1000;i++){

if(isLotus(i))

System.out.print(i+"");

}

System,out.println();

}

//判断水仙花数

privatestaticbooleanisLotus(intlotus){

intm=0;

intn=lotus;

intsum=0;

m=n/100;

n-=m*100;

sum=

m=n/10;

n-=m*10;

sum+=m*m*m+n*n*n;

if(sum==lotus)

returntrue;

else

returnfalse;

【程序4】

题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。

程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后

按下述步骤完成:

⑴如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印

出即可。

⑵如果n<>k,但n能被k整除,则应打印出k的值,并用n除以

k的商,作为新的正整数n,重复执行第一步。

⑶如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

publicclassProg4{

publicstaticvoidmain(String[]args){

intn=13;

decompose(n);

}

privatestaticvoiddecompose(intn){

System.out.print(n+"=");

for(inti=2;i<n+l;i++){

while(n%i==O&&n!=i){

n/=i;

System.out.print(i+"*");

|

if(n==i){

System,out.println(i);

break;

【程序5】

题目:利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学

用A表示,60-89分之间的用B表示,60分以下的用C表示。

程序分析:(a>b)?a:b这是条件运算符的基本例子。

publicclassProg5{

publicstaticvoidmain(String[]args){

intn=-1;

try{

n=Integer.parselnt(args[0]);

}catch(ArrayIndexOutOfBoundsExceptione){

System.out.println("请输入成绩");

return;

}

grade(n);

|

//成绩等级计算

privatestaticvoidgrade(intn){

if(n>100||n<0)

System.out.println("输入无效");

else(

Stringstr=(n>=90)?"^,属于A等":((n>60)?"分,属于

B等":"分,属于C等/

System,out.println(n+str);

【程序6】

题目:输入两个正整数m和n,求其最大公约数和最小公倍数。

程序分析:利用辗除法。

publicclassProg6{

publicstaticvoidmain(String[]args){

intm,n;

try(

m=Integer.parseInt(args[O]);

n=Integer.parselnt(args[1]);

}catch(ArrayIndexOutOfBoundsExceptione){

System.out.printing输入有误");

return;

}

max_min(m,n);

}

//求最大公约数和最小公倍数

privatestaticvoidmax_min(intm,intn){

inttemp=1;

intyshu=1;

intbshu=m*n;

if(n<m){

temp=n;

n=m;

m=temp;

}

while(m!=O){

temp=n%m;

n=m;

m=temp;

yshu=n;

bshu/=n;

System.out.println(m+"和"+n+”的最大公约数为"+yshu);

System.out.println(m+"和"+n+”的最小公倍数为"+bshu);

【程序7】

题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它

字符的个数。

程序分析:利用while语句,条件为输入的字符不为

importjava.util.Scanner;

publicclassProg7_l{

publicstaticvoidmain(String[]args){

System.out.print("请输入一串字符:");

Scannerscan=newScanner(System.in);

Stringstr=scan.nextLine。;//将一行字符转化为字符串

scan.close();

count(str);

)

//统计输入的字符数

privatestaticvoidcount(Stringstr){

StringEl="[\u4e00-\u9fa5]";//汉字

StringE2="[a-zA-Z]";

StringE3="[0-9]";

StringE4="\\s";//空格

intcountChinese=0;

intcountLetter=0;

intcountNumber=0;

intcountSpace=0;

intcountOther=0;

char[]array_Char=str.toCharArrayO;//将字符串转化为

字符数组

String[]array_String=new

String[array_Char.length];//汉字只能作为字符串处理

for(inti=O;i<array_Char.length;i++)

array_String[i]=String.valueOf(array_Char[i]);

//遍历字符串数组中的元素

for(Strings:array_String){

if(s.matches(El))

countChinese++;

elseif(s.matches(E2))

countLetter++;

elseif(s.matches(E3))

countNumber++;

elseif(s.matches(E4))

countSpace++;

else

countOther++;

}

System.out.printin("输入的汉字个数:"+countChinese);

System.out.printing输入的字母个数:"+countLetter);

System.out.printin("输入的数字个数:"+countNumber);

System.out.printin("输入的空格个数:"+countSpace);

System.out.printin("输入的其它字符个数:"+countSpace);

importjava.util.*;

publicclassProg7_2{

publicstaticvoidmain(String[]args){

System.out.println("请输入一行字符:");

Scannerscan=newScanner(System.in);

Stringstr=scan.nextLineQ;

scan.close();

count(str);

//统计输入的字符

privatestaticvoidcount(Stringstr){

List<String>list=newArrayList<String>();

char[]array_Char=str.toCharArray();

for(charc:array_Char)

list.add(String.valueOf(c));//将字符作为字符串添加到

list表中

Collections.sort(list);//排序

for(Strings:list){

intbegin=list.indexOf(s);

intend=list.lastlndexOf(s);

〃索引结束统计字符数

if(list.get(end)==s)

System.out.println("字符<"+s+H,有

"+(end-begin+l)+"个");

【程序8】

题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例

如2+22+222+2222+22222(此时共有5个数相加),几个数相加有

键盘控制。

程序分析:关键是计算出每一项的值。

importjava.util.Scanner;

publicclassProg8{

publicstaticvoidmain(String[]args){

System.out.print("求s=a+aa+aaa+aaaa+…的值,请输入

a的值:");

Scannerscan=new

Scarmer(System.in).useDelimiter("\\s*");//以空格作为分隔符

inta=scan.nextint();

intn=scan.nextlntO;

scan.close。;//关闭扫描器

System.out.println(expressed(2,5)+add(2,5));

}

//求和表达式

privatestaticStringexpressed(inta,intn){

StringBuffersb=newStringBuffer();

StringBuffersubSB=newStringBuffer();

for(inti=1;i<n+1;i++){

subSB=subSB.append(a);

sb=sb.append(subSB);

if(i<n)

sb=sb.append("+");

sb.append("=");

returnsb.toStringO;

|

//求和

privatestaticlongadd(inta,intn){

longsum=0;

longsubSUM=0;

for(inti=1;i<n+1;i++){

subSUM=subSUM*10+a;

sum=sum+subSUM;

}

returnsum;

【程序9】

题目:一个数如果恰好等于它的因子之和,这个数就称为“完数"。例

如6=1+2+3.编程找出1000以内的所有完数。

publicclassProg9{

publicstaticvoidmain(String[]args){

intn=10000;

compNumber(n);

//求完数

privatestaticvoidcompNumber(intn){

intcount=0;

System.out.println(n+"以内的完数:");

for(inti=1;i<n+1;i++){

intsum=0;

for(intj=1;j<i/2+1;j++){

if((i%j)==O){

sum+=j;

if(sum==i){

System.out.print(i+"");

if((count++)%5==0)

System,out.println();

【程序10]

题目:一球从100米高度自由落下,每次落地后反跳回原高度的一

半;再落下,求它在第10次落地时,共经过多少米?第10次反弹

多高?

importjava.util.Scanner;

publicclassProglO{

publicstaticvoidmain(String[]args){

System.out.print("请输入小球落地时的高度和求解的次数:

");

Scannerscan=new

Scanner(System.in).useDelimiter("\\s");

inth=scan.nextlntO;

intn=scan.nextlnt();

scan.closeQ;

distance(h,n);

)

//小球从h高度落下,经n次反弹后经过的距离和反弹的高度

privatestaticvoiddistance(inth,intn){

doublelength=0;

for(inti=0;i<n;i++){

length+=h;

h/=2.0;

System.out.printing经过第"+n+"次反弹后,小球共经过

"+length+"米,"+"第"+n+"次反弹高度为"+h+"米)

}

}

【程序U]

题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字

的三位数?都是多少?

程序分析:可填在百位、十位、个位的数字都是1、2、3、4O组成

所有的排列后再去掉不满足条件的排列。

publicclassProgl1{

publicstaticvoidmain(String[]args){

intcount=0;

intn=0;

for(inti=l;i<5;i++){

for(intj=l;j<5;j++){

if(j==i)

continue;

for(intk=l;k<5;k++){

if(k!=i&&k!=j){

n=i*100+j*10+k;

System.out.print(n+"");

if((++count)%5==0)

System,out.println();

System,out.printlnQ;

System.out.printin("符合条件的数共:"+count+"个");

【程序12]

题目:企业发放的奖金根据利润提成。利润⑴低于或等于10万元时,

奖金可提10%;利润高于10万元,低于20万元时,低于10万元

的部分按10%提成,高于10万元的部分,可可提成7.5%;20万

到40万之间时,高于20万元的部分,可提成5%;40万至!j60万

之间时高于40万元的部分,可提成3%;60万到100万之间时,

高于60万元的部分,可提成1.5%,高于100万元时,超过100

万元的部分按1%提成,从键盘输入当月利润I,求应发放奖金总数?

程序分析:请利用数轴来分界,定位。注意定义时需把奖金定义成长

整型。

importjava.io.*;

publicclassProgl2{

publicstaticvoidmain(String[]args){

System.out.print("请输入当前利润:");

longprofit=Long.parseLong(key_Input());

System.out.printing应发奖金:"+bonus(profit));

|

//接受从键盘输入的内容

privatestaticStringkey_Input(){

Stringstr=null;

BufferedReaderbufln=newBufferedReader(new

InputStreamReader(System.in));

try(

str=bufln.readLine();

}catch(IOExceptione){

e.printStackTrace();

}finally{

try{

bufln.close();

}catch(IOExceptione){

e.printStackTrace();

returnstr;

//计算奖金

privatestaticlongbonus(longprofit){

longprize=0;

longprofit_sub=profit;

if(profit>1000000){

profit=profit_sub-1000000;

profit_sub=1000000;

prize+=profit*0.01;

}

if(profit>600000)(

profit=profit_sub-600000;

profit_sub=600000;

prize+=profit*0.015;

}

if(profit>400000){

profit=profit_sub-400000;

profit_sub=400000;

prize+=profit*0.03;

}

if(profit>200000){

profit=profit_sub-200000;

profit_sub=200000;

prize+=prize*0.05;

}

if(profit>100000)!

profit=profit_sub-100000;

profit_sub=100000;

prize+=profit*0.075;

}

prize+=profit_sub*0.1;

returnprize;

【程序13]

题目:一个整数,它加上100后是一个完全平方数,再加上168又

是一个完全平方数,请问该数是多少?

程序分析:在10万以内判断,先将该数加上1。。后再开方,再将该

数加上268后再开方,如果开方后的结果满足如下条件,即是结果。

publicclassProgl3{

publicstaticvoidmain(String[]args){

intn=0;

for(inti=0;i<100001;i++){

if(isCompSqrt(i+100)&&isCompSqrt(i+268)){

n=i;

break;

}

}

System.out.println("所求的数是:"+n);

)

//判断完全平方数

privatestaticbooleanisCompSqrt(intn){

booleanisComp=false;

for(inti=1;i<Math.sqrt(n)+1;i++){

if(n==Math.pow(i,2)){

isComp=true;

break;

)

}

returnisComp;

【程序14]

题目:输入某年某月某日,判断这一天是这一年的第几天?

程序分析:以3月5日为例,应该先把前两个月的加起来,然后再

加上5天即本年的第几天,特殊情况,闰年且输入月份大于3时需

考虑多加一天。

importjava.util.Scanner;

publicclassProgl4{

publicstaticvoidmain(String[]args){

Scannerscan=new

Scanner(System.in).useDelimiter("\\D");//匹配非数字

System.out.print("请输入当前日期(年-月-日)

intyear=scan.nextlntQ;

intmonth=scan.nextlnt();

intdate=scan.nextlnt();

scan.closeQ;

System,out.printin("今天是"+year+"年的第

“analysis(year,month,date)+"天”);

}

//判断天数

privatestaticintanalysis(intyear,intmonth,intdate){

intn=0;

int[]month_date=newint[]

{0,31,28,31,30,31,30,31,31,30,31,30);

if((year%400)==0||((year%4)==0)&&((year%100)!=0))

month_date[2]=29;

for(inti=0;i<month;i++)

n+=month_date[i];

returnn+date;

【程序15]

题目:输入三个整数x,y,z,请把这三个数由小到大输出。

程序分析:我们想办法把最小的数放到x上,先将x与y进行比较,

如果x>y则将x与y的值进行交换,然后再用x与z进行比较,如

果x>z则将x与z的值进行交换,这样能使x最小。

importjava.util.Scanner;

publicclassProgl5{

publicstaticvoidmain(String[]args){

Scannerscan=new

Scanner(System.in),useDelimiter("\\D");

System.out.print("请输入三个数:");

intx=scan.nextlnt();

inty=scan.nextlntQ;

intz=scan.nextint();

scan.closeO;

System.out.printin("排序结果:"+sort(x,y,z));

//比较两个数的大小

privatestaticStringsort(intx,inty,intz){

Strings=null;

if(x>y){

intt=x;

x=y;

y=t;

}

if(x>z){

intt=x;

x=z;

z=t;

}

if(y>z){

intt=z;

z=y;

y=t;

}

s=x+""+y+""+z;

returns;

【程序16]

题目:输出9*9口诀。

程序分析:分行与列考虑,共9行9列,i控制行,j控制歹!]。

publicclassProgl6{

publicstaticvoidmain(String[]args){

for(inti=1;i<10;i++){

for(intj=l;j<i+l;j++)

System.out.print(j+"*"+i+"="+(j*i)+"");

System.out.printin();

【程序17]

题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,

还不瘾,又多吃了一个第二天早上又将剩下的桃子吃掉一半,又多

吃了一个。以后每天早上都吃了前一天剩下的一半零一个。到第10

天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。

程序分析:采取逆向思维的方法,从后往前推断。

publicclassProgl7{

publicstaticvoidmain(String[]args){

intm=1;

for(inti=10;i>0;i—)

m=2*m+2;

System.out.println("小猴子共摘了"+m+"桃子");

【程序18]

题目:两个乒乓球队进行比赛,各出三人。甲队为a,b,c三人,乙队

为x,y,z三人。已抽签决定比赛名单。有人向队员打听比赛的名单。

a说他不和x比,c说他不和x,z比,请编程序找出三队赛手的名单。

importjava.util.ArrayList;

publicclassProgl8{

Stringa,b,c;//甲队成员

publicstaticvoidmain(String[]args){

Stringf]racer={"x","y","z"};//乙队成员

ArrayList<Prog18>arrayList=new

ArrayList<Prog18>();

for(inti=0;i<3;i++)

for(intj=0;j<3;j++)

for(intk=0;k<3;k++){

Prog18prog18=new

Prog18(racer[i],racer[j],racer[k]);

if(!progl8.a.equals(progl8.b)

&&!progl8.a.equals(progl8.c)

&&!prog18.b.equals(prog18.c)&&

!progl8.a.equals("x")&&!progl8.c.equals("x")

&&!progl8.c.equals("z"))

arrayList.add(prog18);

}

for(Objectobj:arrayList)

System,out.println(obj);

}

//构造方法

privateProgl8(Stringa,Stringb,Stringc){

this,a=a;

this.b=b;

this.c=c;

)

publicStringtoString(){

return"a的对手是"+a+""+"b的对手是"+b+""+"c的对

手是"+c;

}

}

【程序19]

题目:打印出如下图案(菱形)

*

***

******

********

******

***

*

程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一

个规律,利用双重for循环,第一层控制行,第二层控制列。

publicclassProgl9{

publicstaticvoidmain(String[]args){

intn=5;

printStar(n);

)

//打印星星

privatestaticvoidprintStar(intn){

//打印上半部分

for(inti=O;i<n;i++){

for(intj=0;j<2*n;j++){

if(j<n-i)

System.out.print("");

if(j>=n-i&&j<=n+i)

System.out.print("*");

)

System.out.printin();

}

//打印下半部分

for(inti=l;i<n;i++){

System.out.print("");

for(intj=0;j<2*n-i;j++){

if(j<i)

System.out.print("");

if(j>=i&&j<2*n-i-l)

System.out.print("*");

}

System.out.printin();

【程序20]

题目:有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13...

求出这个数列的前20项之和。

程序分析:请抓住分子与分母的变化规律。

publicclassProg20(

publicstaticvoidmain(String[]args){

doublenl=1;

doublen2=1;

doublefraction=nl/n2;

doubleSn=0;

for(inti=0;i<20;i++){

doubletl=nl;

doublet2=n2;

nl=tl+t2;

n2=tl;

fraction=nl/n2;

Sn+=fraction;

}

System,out.print(Sn);

【程序21】

题目:求l+2!+3!+...+20!的和

程序分析:此程序只是把累加变成了累乘。

publicclassProg21{

publicstaticvoidmain(String[]args){

longsum=0;

for(inti=0;i<20;i++)

sum+=factorial(i+l);

System,out.println(sum);

|

//阶乘

privatestaticlongfactorial(intn){

intmult=1;

for(inti=1;i<n+1;i++)

mult*=i;

returnmult;

}

}

【程序22]

题目:利用递归方法求5!。

程序分析:递归公式:fn=fn」*4!

publicclassProg22{

publicstaticvoidmain(String[]args){

System.out.println(fact(10));

}

//递归求阶乘

privatestaticlongfact(intn){

if(n==l)

return1;

else

returnfact(n-l)*n;

【程序23]

题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2

岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说

比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一

个人,他说是10岁。请问第五个人多大?

程序分析:利用递归的方法,递归分为回推和递推两个阶段。要想知

道第五个人岁数,需知道第四人的岁数,依次类推,推到第一人(1。

岁),再往回推。

publicclassProg23{

publicstaticvoidmain(String[]args){

System.out.println(getAge(5,2));

}

//求第m位同志的年龄

privatestaticintgetAge(intm,intn){

if(m==l)

return10;

else

returngetAge(m-l,n)+n;

【程序24】

题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、

逆序打印出各位数字。

publicclassProg24{

publicstaticvoidmain(String[]args){

intn=Integer.parseInt(args[O]);

inti=0;

int[]a=newint[5];

do{

a[i]=n%10;

n/=10;

++i;

}while(n!=0);

System.out.print("这是一个"+i+”位数,从个位起,各位数字

依次为:");

for(intj=O;j<i;j++)

System.out.print(a[j]+"");

【程序25]

题目:一个5位数,判断它是不是回文数。即12321是回文数,个

位与万位相同,十位与千位相同。

importjava.io.*;

publicclassProg25{

publicstaticvoidmain(String[]args){

intn=0;

System.out.print("请输入一个5位数:");

BufferedReaderbufin=newBufferedReader(new

InputStreamReader(System.in));

try(

n=Integer.parseInt(bufin.readLine());

}catch(IOExceptione){

e.printStackTrace();

}finally{

try(

bufin.closeQ;

}catch(IOExceptione){

e.printStackTrace();

palin(n);

privatestaticvoidpalin(intn){

intm=n;

int[]a=newint[5];

if(n<10000||n>99999){

System.out.println("输入的不是5位数!");

return;

}else{

for(inti=0;i<5;i++){

a[i]=n%10;

n/=10;

}

if(a[0]==a[4]&&a[l]==a[3])

System.out.println(m+"是一个回文数");

else

System.out.println(m+"不是回文数");

【程序26】

题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个

字母一样,则继续判断第二个字母。

程序分析:用情况语句比较好,如果第一个字母一样,则判断用情况

语句或if语句判断第二个字母。

importjava.io.*;

publicclassProg26{

publicstaticvoidmain(String[]args){

Stringstr=newStringQ;

BufferedReaderbufln=newBufferedReader(new

InputStreamReader(System.in));

System.out.print("请输入星期的英文单词前两至四个字母):

");

try(

str=bufIn.readLine();

}catch(IOExceptione){

e.printStackTrace();

}finally(

try(

bufln.close();

}catch(IOExceptione){

e.printStackTrace();

week(str);

privatestaticvoidweek(Stringstr){

intn=-1;

if(str.trim().equalsIgnoreCase("Mo")||

str.trimQ.equalsIgnoreCase("Mon")||

str.trim().equalsIgnoreCase("Mond"))

n=1;

if(str.trim().equalsIgnoreCase("Tu")||

str.trimQ.equalsIgnoreCase("Tue")||

str.trimQ.equalsIgnoreCase("Tues"))

n=2;

if(str.trim().equalsIgnoreCase("We")||

str.trimQ.equalsIgnoreCase("Wed")||

str.trim().equalsIgnoreCase("Wedn"))

n=3;

if(str.trim().equalsIgnoreCase("Th")||

str.trimQ.equalsIgnoreCase("Thu")||

str.trimQ.equalsIgnoreCase("Thur"))

n=4;

if(str.trim().equalsIgnoreCase("Fr")||

str.trimQ.equalsIgnoreCase("Fri")||

str.trim().equalsIgnoreCase("Frid"))

n=5;

if(str.trim().equalsIgnoreCase("Sa")||

str.trimQ.equalsIgnoreCase("Sat")||

str.trim().equalsIgnoreCase("Satu"))

n=2;

if(str.trim().equalsIgnoreCase("Su")||

str.trim().equalsIgnoreCase("Sun")||

str.trimQ.equalsIgnoreCase("Sund"))

n=0;

switch(n){

case1:

System.out.printin("星期一");

break;

case2:

System.out.printing星期二");

break;

case3:

System.out.printing星期三");

break;

case4:

System.out.printing星期四");

break;

case5:

System.out.printing星期五");

break;

case6:

System.out.printin("星期六");

break;

case0:

System.out.printin("星期日");

break;

default:

System.out.printing输入有误!

break;

【程序27]

题目:求100之内的素数

publicclassProg27(

publicstaticvoidmain(String[]args){

intn=100;

System.out.print(n+"以内的素数:");

for(inti=2;i<n+l;i++){

if(isPrime(i))

System.out.print(i+"");

}

|

//求素数

privatestaticbooleanisPrime(intn){

booleanflag=true;

for(inti=2;i<Math.sqrt(n)+1;i++)

if(n%i==O){

flag=false;

break;

|

returnflag;

【程序28】

题目:对10个数进行排序

程序分析:可以利用选择法,即从后9个比较过程中,选择一个最小

的与第一个元素交换,下次类推,即用第二个元素与后8个进行比

较,并进行交换。

publicclassProg28(

publicstaticvoidmain(String[]args){

int[]a=newint[]{31,42,21,50,12,60,81,74,101,93);

for(inti=0;i<10;i++)

for(intj=0;j<a.length-i-1;j++)

if(a[j]>a[j+l]){

inttemp=a[j];

a[j]=a[j+l];

a[j+l]=temp;

}

for(inti=0;i<a.length;i++)

System.out.print(a[i]+"");

}

}

【程序29]

题目:求一个3*3矩阵对角线元素之和

程序分析:利用双重for循环控制输入二维数组,再将累加后

输出。

publicclassProg29(

publicstaticvoidmain(String[]args){

int[][]a=newint[][]{{100,2,3,},{4}5,6},{17,8,9});

matrSum(a);

)

privatestaticvoidmatrSum(int[][]a){

intsuml=0;

intsum2=0;

for(inti=0;i<a.length;i++)

for(intj=0;j<a[i].length;j++){

if(i==j)suml+=a[i][j];

if(j==a.length-i-1)sum2+=a[i][j];

}

System.out.println("矩阵对角线之和分别是:"+suml+"和

"+sum2);

【程序30]

题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律

将它插入数组中。

程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间

的数的情况,插入后此元素之后的数,依次后移一个位置。

importjava.util.Scanner;

publicclassProg30{

publicstaticvoidmain(String[]args){

int[]A=newint口{0,8,7,5,9,1,2,4,3,12};

int[]B=sort(A);

print(B);

System,out.println();

System.out.print("请输入10个数的数组:");

Scannerscan=newScanner(System.in);

inta=scan.nextlntO;

scan.closeQ;

int[]C=insert(a,B);

print(C);

//选择排序

privatestaticint[]sort(int[]A){

int[]B=newint[A.length];

for(inti=O;i<A.length-1;i++){

intmin=A[i];

for(intj=i+1;j<A.length;j++){

if(min>A[j]){

inttemp=min;

min=A[j];

A[j]=temp;

B[i]=min;

B[A.length-1]=A[A.length-l];

returnB;

}

//打印

privatestaticvoidprint(int[]A){

for(inti=O;i<A.length;i++)

System.out.print(A[i]+"");

)

//插入数字

privatestaticint[]insert(inta,int[]A){

int[]B=newint[A.length+l];

for(inti=A.length-1;i>O;i—)

if(a>A[i]){

B[i+1]=a;

for(intj=O;j<=i;j++)

B[j]=A[j];

for(intk=i+2;k<B.length;k++)

B[k]=A[k-1];

break;

returnB;

【程序31】

题目:将一个数组逆序输出。

程序分析:用第一个与最后一个交换。

publicclassProg31{

publicstaticvoidmain(String[]args){

int[]A=newint[]{l,2,3,4,5,6,7,8,9,};

print(A);

System,out.println();

int[]B=reverse(A);

print(B);

)

privatestaticint[]reverse(int[]A){

for(inti=O;i<A.length/2;i++){

inttemp=A[A.length-i-l];

A[A.length-i-l]=A[i];

A[i]=temp;

}

returnA;

)

privatestaticvoidprint(int[]A){

for(inti=O;i<A.length;i++)

System.out.print(A[i]+"");

【程序32]

题目:取一个整数a从右端开始的4〜7位。

程序分析:可以这样考虑:

⑴先使a右移4位。

⑵设置一个低4位全为1,其余全为0的数。可用~(~0<<4)

⑶将上面二者进行&运算。

importjava.util.Scanner;

publicclassProg32{

publicstaticvoidmain(String[]msg){

//输入一个长整数

Scannerscan=newScanner(System.in);

long1=scan.nextLongO;

scan.closeQ;

//以下截取字符

Stringstr=Long.toString(l);

char[]ch=str.toCharArrayQ;

intn=ch.length;

if(n<7)

System.out.println("输入的数小于7位!");

else

System.out.printin("截取的4~7位数字:

"+ch[n-7]+ch[n-6]+ch[n-5]+ch[n-4]);

【程序33]

题目:打印出杨辉三角形(要求打印出1。行如下图)

程序分析:

1

11

121

1331

14641

15101051

publicclassProg33{

publicstaticvoidmain(String[]args){

int[][]n=newint[10][21];

n[0][10]=1;

for(inti=1;i<10;i++)

for(intj=10-i;j<10+i+1;j++)

n[i][j]=n[i-l][j-l]+n[i-l][j+l];

for(inti=0;i<10;i++){

for(intj=0;j<21;j++){

if(n[i][j]==O)

System,out.print("");

else{

if(n[i][j]<10)

System.out.print(""+n[i][j]);//空格为了美观需

elseif(n[i][j]<100)

System.out.print(""+n[i][j]);

else

System.out.print(n[i][j]);

)

}

System.out.printin();

【程序34]

题目:输入3个数a,b,c,按大小顺序输出。

程序分析:利用指针方法。

importjava.util.Scanner;

publicclassProg34{

publicstaticvoidmain(String[]args){

System.out.print("请输入3个数:");

Scannerscan=new

Scanner(System.in).useDelimiter("\\s");

inta=scan.nextlntO;

intb=scan.nextlntO;

intc=scan.nextlntQ;

scan.closeO;

if(a<b){

intt=a;

a=b;

b=t;

}

if(a<c){

intt=a;

a=c;

c=t;

}

if(b<c){

intt=b;

b=c;

c=t;

System.out.println(a+""+b+""+c);

}

}

【程序35]

题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素

交换,输出数组。

importjava.util.Scanner;

publicclassProg35{

publicstaticvoidmain(String[]args){

System.out.print("请输入一组数:");

Scannersca

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论