java练习题50道文档格式.docx
《java练习题50道文档格式.docx》由会员分享,可在线阅读,更多相关《java练习题50道文档格式.docx(54页珍藏版)》请在冰豆网上搜索。
i++){//Math.sqrt(sum)开根表示像5*5这样的,运行到5即可,另一半重复
if(sum%i==0){
returnfalse;
}
returntrue;
publicstaticvoidmain(String[]args){
for(inti=101;
=200;
if(test02.calculate(i)){
System.out.println(i);
}
}
/*【程序3】
打印出所有的"
水仙花数"
,所谓"
是指一个三位数,其各位数字立方和等于该数本身。
例如:
153是一个"
,因为153=1的三次方+5的三次方+3的三次方。
利用for循环控制100-999个数,每个数分解出个位,十位,百位。
*/
publicclasstest03{
for(intsum=100;
sum<
=999;
sum++){
intbw,sw,gw;
bw=sum/100;
sw=(sum-bw*100)/10;
gw=sum-bw*100-sw*10;
if(sum==((int)Math.pow(bw,3)+(int)Math.pow(sw,3)+(int)Math.pow(gw,3))){
//Math.pow(a,b)a的b次方double类型
System.out.println(sum);
/*【程序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.util.*;
publicclasstest04{
publicstaticvoidcalculate(intnum){
System.out.print(num+"
="
);
=num;
while(num!
=i){
if(num%i==0){
System.out.print(i+"
*"
num=num/i;
}else{
break;
System.out.print(num);
System.out.println("
请你输入一个正整数,并按Enter确认"
Scannersc=newScanner(System.in);
intnum=sc.nextInt();
test04.calculate(num);
//System.out.print();
输出的结果不换行
//System.out.println();
输出的结果换行
/*【程序5】
利用条件运算符的嵌套来完成此题:
学习成绩>
=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
(a>
b)?
a:
b这是条件运算符的基本例子。
publicclasstest05{
请输入成绩,并按Enter确认"
intscore=sc.nextInt();
test05.grade(score);
publicstaticvoidgrade(intn){
if(n>
100||n<
0){
输入错误!
}else{
Stringstr=(n>
=90)?
A"
:
((n>
60)?
B"
C"
System.out.println(n+"
分等级为"
+str);
/*【程序6】
输入两个正整数m和n,求其最大公约数和最小公倍数。
利用辗除法。
publicclasstest06{
请输入一个数m,并按Enter确认"
Scannera=newScanner(System.in);
intm=a.nextInt();
请输入另一个数n,并按Enter确认"
Scannerb=newScanner(System.in);
intn=b.nextInt();
System.out.print("
m与n的最大公约数为"
System.out.println(test06.gongyue(n,m));
m与n的最小公倍数为"
System.out.println(test06.gongbei(n,m));
publicstaticintgongyue(intn,intm){
while(m%n!
=0){//运用递归调用将求余之后的值作为n将之前的n作为m直到求余值为0为止结束循环*/
inttemp=m%n;
m=n;
n=temp;
returnn;
publicstaticintgongbei(intn,intm){
return(n*m/gongyue(n,m));
//求公倍数就是将两个数相乘除以最大公约数
/*【程序7】
输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
利用while语句,条件为输入的字符不为'
\n'
publicclasstest07_1{
intabcCount=0;
//英文字母个数
intspaceCount=0;
//空格键个数
intnumCount=0;
//数字个数
intotherCount=0;
//其他字符个数
请输入一行字符,按ENTER确认"
Scannerscan=newScanner(System.in);
Stringstr=scan.nextLine();
char[]ch=str.toCharArray();
for(inti=0;
ch.length;
if(Character.isLetter(ch[i])){//判断是否字母
abcCount++;
elseif(Character.isDigit(ch[i])){//判断是否数字
numCount++;
elseif(Character.isSpaceChar(ch[i])){//判断是否空格键
spaceCount++;
else{//以上都不是则认为是其他字符
otherCount++;
System.out.println("
字母个数:
+abcCount);
数字个数:
+numCount);
空格个数:
+spaceCount);
其他字符个数:
+otherCount);
//【程序7】BufferedReader的使用
//
importjava.io.*;
publicclasstest07_2{
publicstaticvoidmain(String[]args)throwsIOException{
//根据字符的ASCII查找
BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));
Stringstr=br.readLine();
StringBuffersb=newStringBuffer();
sb.append(str);
inta=0,b=0,c=0;
for(intj=0;
j<
sb.length();
j++){
//48——57代表0——9
if(sb.charAt(j)<
=57&
sb.charAt(j)>
=48){
a++;
//65——90代表A-Z,97-122代表a——z
=90&
=65|sb.charAt(j)<
=122
&
=97){
b++;
if(sb.charAt(j)=='
'
){
c++;
数字个数:
+a);
字母数:
+b);
空格数:
+c);
其他字符数:
+(sb.length()-a-b-c));
/*【程序8】
求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。
例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。
关键是计算出每一项的值。
publicclasstest08{
intnum,n,s;
请输入要计算的数字,按ENTER键确认"
num=a.nextInt();
\n请输入要相加的个数,按ENTER键确认"
n=b.nextInt();
s=test08.calculate(n,num);
根据算式得出的结果为"
+s);
publicstaticintcalculate(intn,intnum){
ints=num;
n;
num=num*10+num;
s=s+num;
returns;
/*【程序9】
一个数如果恰好等于它的因子之和,这个数就称为"
完数"
。
例如6=1+2+3.
编程找出1000以内的所有完数。
publicclasstest09{
intsum,j,i;
1-1000中的完数为"
for(i=1;
=1000;
sum=0;
for(j=1;
j<
i;
j++){
if(i%j==0){
sum=sum+j;
if(sum==i){
System.out.print(i+"
"
/*【程序10】
一球从100米高度自由落下,每次落地后反跳回原高度的一半;
再落下,
求它在第10次落地时,共经过多少米?
第10次反弹多高?
publicclasstest10{
floatn=10,h=100,sum=0;
for(inti=0;
sum=h+h/2+sum;
h=h/2;
小球反弹"
+n+"
次共经过"
+sum+"
米"
+"
第10次反弹"
+h+"
/*【程序11】
有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?
都是多少?
可填在百位、十位、个位的数字都是1、2、3、4。
组成所有的排列后再去掉不满足条件的排列。
publicclasstest11_1{
inti,j,k,n=0;
=4;
for(k=1;
k<
k++){
if(i!
=j&
&
i!
=k&
j!
=k){
System.out.print(i*100+j*10+k+"
n++;
System.out.println();
共有"
个数字"
//使用数组可以选取任意数字,test11_1中只能选取连续的数字
publicclasstest11_2{
inta[]={1,2,3,4};
for(i=0;
4;
for(j=0;
for(k=0;
if(a[i]!
=a[j]&
a[i]!
=a[k]&
a[j]!
=a[k]){
System.out.print(a[i]*100+a[j]*10+a[k]+"
/*【程序12】
企业发放的奖金根据利润提成。
利润(I)低于或等于10万元时,奖金可提10%;
利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;
20万到40万之间时,高于20万元的部分,可提成5%;
40万到60万之间时高于40万元的部分,可提成3%;
60万到100万之间时,高于60万元的部分,可提成1.5%,
高于100万元时,超过100万元的部分按1%提成,
从键盘输入当月利润I,求应发放奖金总数?
请利用数轴来分界,定位。
注意定义时需把奖金定义成长整型。
//importjava.util.*;
importjava.util.Scanner;
publicclasstest12{
inti=-1;
doubles=0;
请输入本月利润(单位:
万元),按ENTER键确认"
i=b.nextInt();
if(i<
do{
System.out.println("
输入错误!
请重新输入"
System.out.print("
Scannera=newScanner(System.in);
i=a.nextInt();
}while(i<
0);
if(i<
=10){
s=i*0.1;
}elseif(i>
10&
=20){
s=10*0.1+(i-10)*0.075;
20&
=40){
s=10*0.1+10*0.075+(i-20)*0.05;
40&
=60){
s=10*0.1+10*0.075+20*0.05+(i-40)*0.03;
60&
=100){
s=10*0.1+10*0.075+20*0.05+20*0.03+(i-60)*0.015;
s=10*0.1+10*0.075+20*0.05+20*0.03+60*0.015+(i-100)*0.01;
本月应发放奖金"
+s+"
万元"
/*【程序13】
一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
在10万以内判断,先将该数加上100后再开方,再将该数加上268后再开方,
如果开方后的结果满足如下条件,即是结果。
//没有完成double到int的转换后面的"
.0"
还存在
publicclasstest13{
一个数,加上100后是一个完全平方数,再加上168又是一个完全平方数。
\n这个数是:
doublenum,n,num1=100,num2=168;
for(num=-100;
num<
=100000;
num++){
n=Math.sqrt((num+num1));
if((num+num1)%n==0){
n=Math.sqrt((num+num1+num2));
if((num+num1+num2)%n==0){
System.out.print(num+"
/*【程序14】
输入某年某月某日,判断这一天是这一年的第几天?
以3月5日为例,应该先把前两个月的加起来,然后再加上5天即本年的第几天,
特殊情况,闰年且输入月份大于3时需考虑多加一天。
publicclasstest14{
intyear,month,day,data,nian;
请输入年,按ENTER键确认"
year=a.nextInt();
请输入月,按ENTER键确认"
month=b.nextInt();
请输入日,按ENTER键确认"
Scannerc=newScanner(System.in);
day=c.nextInt();
nian=test14.runnian(year);
data=test14.calculate(nian,month,day);
System.out.println(year+"
-"
+month+"
+day+"
是该年中的第"
+data+"
天"
publicstaticintrunnian(intyear){
intnian;
if((yea