50道JAVA基础编程练习题全面解答.docx

上传人:b****5 文档编号:7236416 上传时间:2023-01-22 格式:DOCX 页数:62 大小:113.07KB
下载 相关 举报
50道JAVA基础编程练习题全面解答.docx_第1页
第1页 / 共62页
50道JAVA基础编程练习题全面解答.docx_第2页
第2页 / 共62页
50道JAVA基础编程练习题全面解答.docx_第3页
第3页 / 共62页
50道JAVA基础编程练习题全面解答.docx_第4页
第4页 / 共62页
50道JAVA基础编程练习题全面解答.docx_第5页
第5页 / 共62页
点击查看更多>>
下载资源
资源描述

50道JAVA基础编程练习题全面解答.docx

《50道JAVA基础编程练习题全面解答.docx》由会员分享,可在线阅读,更多相关《50道JAVA基础编程练习题全面解答.docx(62页珍藏版)》请在冰豆网上搜索。

50道JAVA基础编程练习题全面解答.docx

50道JAVA基础编程练习题全面解答

50道JAVA基础编程练习题解答

本人尚属菜鸟,因此下面的解答有可能会出现错误,也可能使用的方法不够简便,希望指正。

发现错误了,请QQ联系我,希望得到指正。

QQ:

474027915

【程序1】

题目:

古典问题:

有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

.程序分析:

兔子的规律为数列1,1,2,3,5,8,13,21....

解答:

(方法一)

利用数学分析可得知:

这个月的兔子数量为前两个月的兔子数量之和,推导过程如下:

 

X1,X2,X3Y1,Y2,Y3Z1,Z2,Z3

X1:

表示一个月大的兔子;X2表示两个月大的兔子;X3表示三个月及三月以上的兔子。

有以下数学表达式:

Y1=X2+X3,Y2=X1,Y3=X2+X3

Z1=Y2+Y3,Z2=Y1,Z3=Y2+Y3

Z1+Z2+Z3=Y2+Y3+Y1+(Y2+Y3)=(Y2+Y3+Y1)+(X2+X3+X1)

因此上面每个月的兔子的数量满足斐波那契数列。

编程实现较为简单,此处省略。

(方法二)

方法二利用编程实现,具有一般性(开始兔子个数和产仔周期可自行输入),程序设计如下:

importjava.util.*;

importjava.io.*;

classTuZi

{

intnianling=1;

}

publicclassText1{

publicstaticvoidmain(String[]args)throwsIOException{

//TODOAuto-generatedmethodstub

intshuliang=1;

intzhouqi=4;

intyuefen=0;

Vectorrongqi=newVector();

System.out.print("输入兔子开始数量:

");

BufferedReaderstdin=newBufferedReader(newInputStreamReader(System.in));

shuliang=(newInteger(stdin.readLine()));

System.out.print("输入兔子生产周期:

");

zhouqi=(newInteger(stdin.readLine()));

System.out.print("输入查询月份:

");

yuefen=(newInteger(stdin.readLine()));

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

{

rongqi.addElement(newTuZi());

}

for(inti=2;i<=yuefen;i++)

{

for(intj=0;j

{

TuZia=(TuZi)rongqi.elementAt(j);

a.nianling++;

}

for(intj=0;j

{

if(rongqi.elementAt(j).nianling>=zhouqi)

{

rongqi.addElement(newTuZi());

}

}

}

System.out.print("兔子数量为:

"+rongqi.size());

}

}

【程序2】

题目:

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

1.程序分析:

判断素数的方法:

用一个数分别去除2到sqrt(这个数),如果能被整除,

则表明此数不是素数,反之是素数。

解答:

程序如下:

publicclassText2{

publicstaticvoidmain(String[]args){

//TODOAuto-generatedmethodstub

intsum=0;

System.out.print("101到200的素数是:

");

for(inti=101;i<=200;i++)

{

intflag=0;

for(intj=2;j<=Math.sqrt(i);j++)

{

floatk=(float)i;

if(k%j==0)

{

flag=1;

break;

}

}

if(flag==0)

{

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

sum++;

}

}

System.out.println("");

System.out.print("素数个数为:

");

System.out.print(sum);

}

}

【程序3】

题目:

打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。

例如:

153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

1.程序分析:

利用for循环控制100-999个数,每个数分解出个位,十位,百位。

解答:

程序如下:

publicclassText3{

publicstaticvoidmain(String[]args)

{

inta=0;intb=0;intc=0;

System.out.println("100到999的水仙花数为:

");

for(inti=100;i<=999;i++)

{

a=i/100;

b=i/10-a*10;

c=i-b*10-a*100;

if(i==a*a*a+b*b*b+c*c*c)

{

System.out.println(i);

}

}

}

}

【程序4】

题目:

将一个正整数分解质因数。

例如:

输入90,打印出90=2*3*3*5。

解答:

分析:

对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:

(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。

(2)如果n>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。

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

这个题目很明显是要用递归算法来实现的,打印“*”有些技巧,但也很容易解决,程序如下:

importjava.io.*;

publicclassText4{

publicstaticvoidchuLi(intn)

{

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

{

if(n==i)

{

System.out.print(i);

return;

}

if(n>i&&(n%i==0))

{

n=n/i;

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

chuLi(n);

break;//这句很重要

}

}

}

publicstaticvoidmain(String[]args)throwsIOException

{

intshu=0;

BufferedReaderstdin=newBufferedReader(newInputStreamReader(System.in));

System.out.print("请输入正整数:

");

shu=(newInteger(stdin.readLine()));

chuLi(shu);

}

}

【程序5】

题目:

利用条件运算符的嵌套来完成此题:

学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。

解答:

此题较为简单,程序如下

importjava.io.*;

publicclassText5{

publicstaticvoidmain(String[]agrs)throwsIOException

{

System.out.print("请输入成绩:

");

BufferedReaderstdin=newBufferedReader(newInputStreamReader(System.in));

intchengji=newInteger(stdin.readLine());

chardengji=chengji<60?

'C':

(chengji>=90?

'A':

'B');

System.out.print(dengji);

}

}

【程序6】

题目:

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

<求最大公约数>

算法

(1)设计:

E0.[确保m

n]若m

n,则m

n。

E1.[求余数]以n除m并令r为所得余数。

(我们将有0

r

n。

E2.[余数为0?

]若r为0,算法结束,n即为所求答案。

E3.[减少]置m

n,n

r,并返回步骤E1。

数学证明:

(1)若m%n=0,则n为所求最大公因子

(2)若m%n

0,则只需证明下面命题成立

如果某数是n与m%n的最大公因子,则这个数也是m和n的最大公因子。

(上面算法可化为这句话)

证明:

假设a是n和m%n的最大公因子,则有:

因有(m%n)%a=0,故可设m%n=k*a,k为正整数。

又n%a=0,故可设n=p*a,p也为正整数。

可得数学表达式:

m=t*n+m%n,其中t为不小于0的整数。

因此有:

m=t*p*a+k*a=(t*p+k)*a,因此可得m%a=0

因此有如下两个表达式:

a为m和n的公因子已经证毕。

如何确定a为m和n的最大公因子?

(可用反证法证明)

证明:

假设m和n存在公因子b,且有b>a。

则有:

可以仿照上面的推导过程得出:

则b也是n和m%n的公因子,又b>a,与a是n和m%n的最大公因子矛盾。

综上,如果某数是n与m%n的最大公因子,则这个数也是m和n的最大公因子。

(3)证毕。

对步骤E0的分析:

若m

当进行E0后,m为较大者,m%n

n。

算法

(2)设计:

F1.[余数m/n]以n除m,并令m为余数。

F2.[它是0?

]如果m=0,则此算法以n为答案而终止。

F3.[余数n/m]以m除n,并令n是余数。

F4.[它是0?

]如果n=0,则算法以答案m而终止,否则返回步骤F1。

算法

(2)可仿照算法

(1)进行证明

<求最大公倍数>

算法设计:

F1:

求出m和n的较大者,令较大者为m,较小者为n。

F2:

判断m能否被n整除,若能则m为两者最小公倍数。

F2:

将n分解因式。

F3:

将m依次乘以n的因子,判断乘积能否被n整除,若能则乘积为两者最小公倍数。

根据上面的算法,程序如下:

importjava.io.*;

importjava.util.*;

publicclassText6{

publicstaticvoidfenJie(Vectorm,intn)

{

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

{

if(n==i)

{

m.addElement(i);

return;

}

if(n>i&&(n%i==0))

{

n=n/i;

m.addElement(i);

fenJie(m,n);

break;

}

}

}

publicstaticintgongBeiShu(Vectorm,inta,intb)

{

intchengji=1;

if(a%b==0)

returna;

for(inti=0;i

{

chengji=chengji*m.elementAt(i);

if((a*chengji)%b==0)

{

returna*chengji;

}

}

returna*b;

}

publicstaticintbigYinZi(inta,intb)

{

intr=a%b;

intm=0;

if(r==0)

returnb;

else

{

a=b;

b=r;

m=bigYinZi(a,b);

returnm;

}

}

publicstaticvoidmain(String[]args)throwsIOException

{

Integershu1=0;Integershu2=0;intt=0;

Vectorpool=newVector();

BufferedReaderstdin=newBufferedReader(newInputStreamReader(System.in));

System.out.print("请输入第一个正整数:

");

shu1=(newInteger(stdin.readLine()));

System.out.print("请输入第二个正整数:

");

shu2=(newInteger(stdin.readLine()));

if(shu1

{

t=shu2;

shu2=shu1;

shu1=t;

}

fenJie(pool,shu2);

t=bigYinZi(shu1,shu2);

System.out.println("最大公约数是:

"+t);

t=gongBeiShu(pool,shu1,shu2);

System.out.print("最小公倍数:

"+t);

}

}

【程序7】

题目:

输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

解答:

这题需要对汉字的内码进行一定的了解,汉字占两个字节,每个字节的开始位为1。

程序如下:

importjava.io.*;

publicclassText7{

publicstaticvoidmain(String[]agrs)throwsIOException

{

Stringzifuchuan=newString("");

inthanzishu=0;intzimu=0;intkongge=0;intshuzi=0;intqita=0;

System.out.print("请输入一行字符:

");

BufferedReaderstdin=newBufferedReader(newInputStreamReader(System.in));

zifuchuan=stdin.readLine();

byte[]bytes=zifuchuan.getBytes();

for(inti=0;i

{

if((bytes[i]>=65&&bytes[i]<=90)||(bytes[i]>=97&&bytes[i]<=122))

zimu++;

elseif(bytes[i]==32)

kongge++;

elseif(bytes[i]>=48&&bytes[i]<=57)

shuzi++;

elseif(bytes[i]<0)

hanzishu++;

else

qita++;

}

System.out.println("字符串所占字节个数为:

"+bytes.length);

System.out.println("汉字个数为:

"+hanzishu/2);

System.out.println("英文字母个数为:

"+zimu);

System.out.println("空格个数为:

"+kongge);

System.out.println("数字个数为:

"+shuzi);

System.out.println("其他字符个数为:

"+qita);

}

}

【程序8】

题目:

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

例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

解答:

在此题中,利用进行字符串运算的“+”运算符,然后将字符串转为数字,实现了程序过程,程序设计如下:

importjava.io.*;

publicclassText8{

publicstaticvoidmain(String[]args)throwsIOException

{

ints=0;inta=0;intsum=0;Stringp="";

BufferedReaderstdin=newBufferedReader(newInputStreamReader(System.in));

System.out.print("请输入数字a:

");

a=newInteger(stdin.readLine());

System.out.print("请输入数字个数s:

");

s=newInteger(stdin.readLine());

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

{

Characterc=(char)(a+'0');

p=c.toString();

for(intj=1;j

{

p=p+a;

}

intd=Integer.parseInt(p);

sum=sum+d;

}

System.out.println("结果为:

"+sum);

}

}

【程序9】

题目:

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

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

解答:

根据题目意思,设计程序如下:

importjava.io.*;

importjava.util.*;

publicclassText9{

publicstaticvoidfenJie(Vectorm,intn)

{

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

if(n%i==0)

m.addElement(i);

}

publicstaticbooleanpanBie(Vectorm,intn)

{

intsum=0;

for(inti=0;i

sum=sum+m.elementAt(i);

if(sum==n)

returntrue;

else

returnfalse;

}

publicstaticvoidmain(String[]args)throwsIOException

{

booleanzhenjia=false;

System.out.println("1000以内的完数为:

");

for(inti=2;i<1000;i++)

{

Vectorpool=newVector();

fenJie(pool,i);

zhenjia=panBie(pool,i);

if(zhenjia)

System.out.println(i);

}

}

}

【程序10】

题目:

一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?

第10次反弹多高?

解答:

此题较为简单,程序设计如下:

importjava.io.*;

publicclassText10{

publicstaticvoidmain(String[]args)throwsIOException{

floatheigh=100;intcishu=10;floatsum=0;

BufferedReaderstdin=newBufferedReader(newInputStreamReader(System.in));

System.out.print("输入初始下落高度:

");

heigh=(newFloat(stdin.readLine()));

sum=heigh;

System.out.print("输入落地碰撞次数:

");

cishu=(newInteger(stdin.readLine()));

for(inti=1;i

{

heigh=heigh/2;

sum=sum+heigh*2;

}

System.out.println("第"+cishu+"次反弹高度为:

"+heigh);

System.out.println("第"+cishu+"次落地总经过长度为:

"+sum);

}

}

【程序11】

题目:

有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?

都是多少?

解答:

理解好排列组合,可设计程序如下:

publicclassText11{

publicstaticvoidmain(String[]args){

int[]a={1,2,3,4};

System.out.println("满足条件的三位数是:

");

for(inti=0;i

{

for(intj=0;j

{

if(j==i)

continue;

for(intk=0;k

{

if(k==i||k==j)

continue;

for(inth=0;h

{

if(h==i||h==j||h==k)

continue;

System

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

当前位置:首页 > 初中教育 > 数学

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

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