java基础50道经典练习题及答案

温柔似野鬼°
685次浏览
2021年01月25日 13:34
最佳经验
本文由作者推荐

狗猫鼠主要内容-

2021年1月25日发(作者:因为设计)


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

整理:
Lemon
【程序
1


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

程序分析:

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










}
【程序
2


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

程序分析:
判断素数的方法:
用一个数分别去除
2

sqrt(这个数
)

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

public class Prog2{














public static void main(String[] args){













int m = 1;
int n = 1000;
int count = 0;
//
统计素数个数

for(int i=m;i






}
if(isPrime(i)){





}
count++;
(i+
if(count%10==0){

}
n();
public static void main(String[] args){


}
private static int fun(int n){




}
if(n==1 || n==2)



return 1;
else



return fun(n-1)+fun(n-2);
int n = 10;
n(


个月兔子总数为






















}


}
n();
n(




之间共有

个素数

//
判断素数

private static boolean isPrime(int n){














}
boolean flag = true;
if(n==1)
flag = false;
else{







}
}
return flag;
for(int i=2;i<=(n);i++){
if((n%i)==0 || n==1){


}
else
flag = true;
flag = false;
break;
【程序
3


题目:打 印出所有的

水仙花数

,所谓

水仙花数

是指 一个三位数,其各位数字立方和等于该数本身。例
如:
153
是一个

水仙花数

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

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

public class Prog3{










public static void main(String[] args){





}
//
判断水仙花数

private static boolean isLotus(int lotus){

int m = 0;
for(int i=100;i<1000;i++){


}
n();
if(isLotus(i))
(i+














}













int n = lotus;
int sum = 0;
m = n/100;
n -= m*100;
sum = m*m*m;
m = n/10;
n -= m*10;
sum += m*m*m + n*n*n;
if(sum==lotus)

return true;
else

}
return false;
【程序
4


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


程序分析: 对
n
进行分解质因数,应先找到一个最小的质数
k
,然后按下述步骤完成:< br>
(1)
如果这个质数恰等于
n
,则说明分解质因数的过程已经结束, 打印出即可。

(2)
如果
n<>k


n
能被
k
整除,
则应打印出
k
的值,
并用
n
除以
k
的商
,
作为新的正整数
n,
重复执行第一
步。

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

public class Prog4{














public static void main(String[] args){


}
private static void decompose(int n){









(n+
for(int i=2;i






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


}
if(n==i){


n(i);
break;
n/=i;
(i+
int n = 13;
decompose(n);




}


}

}
}
【程序
5


题目:利用条件运算符的嵌套来完成此题:学习成绩
>=90
分的同学用
A< br>表示,
60-89
分之间的用
B
表示,
60
分以下的 用
C
表示。

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

public class Prog5{



















}
【程序
6

题目:输入两个正整数
m

n
,求其最大公约数和最小公倍数。

程序分析:利用辗除法。

public class Prog6{







public static void main(String[] args){






int m,n;
try{


m = nt(args[0]);
n = nt(args[1]);
public static void main(String[] args){








}
//
成绩等级计算

private static void grade(int n){






}
if(n>100 || n<0)


n(
输入无效

else{


String str = (n>=90)?
分,属于
A


分,属于
B< br>等

分,属于
C




n(n+str);
}
int n = -1;
try{



}
grade(n);
n = nt(args[0]);
n(
请输入成绩

return;
}catch(ArrayIndexOutOfBoundsException e){
}catch(ArrayIndexOutOfBoundsException e){

n(
输入有误


























}



}

}
return;
max_min(m,n);
//
求最大公约数和最小公倍数

private static void max_min(int m, int n){

















}
int temp = 1;
int yshu = 1;
int bshu = m*n;
if(n


}
while(m!=0){



}
yshu = n;
bshu /= n;
n(m+


的最大公约数为

n(m+

< br>的最小公倍数为

temp = n%m;
n = m;
m = temp;
temp = n;
n = m;
m = temp;
【程序
7


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

程 序分析:利用
while
语句
,
条件为输入的字符不为
'n'.
import r;
public class Prog7_1{






public static void main(String[] args){





(
请输入一串字符:

Scanner scan = new Scanner();
String str = ne();//
将一行字符转化为字符串

();
count(str);




































}
}
//
统计输入的字符数

private static void count(String str){































}
String E1 =
汉字

String E2 =
String E3 =
String E4 =
空格

int countChinese = 0;
int countLetter = 0;
int countNumber = 0;
int countSpace = 0;
int countOther = 0;
char[] array_Char = Array();//
将字符串转化为字符数组

String[] array_String = new String[array_];//
汉字只能作为字符串处理

for(int i=0;i array_String[i] = f(array_Char[i]);
//
遍历字符串数组中的元素

for(String s:array_String){










}
n(
输入的汉字个数:

n(
输入的字母个数:

n(
输入的数字 个数:

n(
输入的空格个数:

n(
输入的其它字符个数:< br>
if(s(E1))
countChinese++;
else if(s(E2))
countLetter++;
else if(s(E3))
countNumber++;
else if(s(E4))
countSpace++;
else
countOther++;

import .*;
public class Prog7_2{






















}
【程序
8


题目:求
s=a+aa+aaa +aaaa+aa...a
的值,其中
a
是一个数字。例如
2+22+222 +2222+22222(
此时共有
5

数相加
)
,几个数 相加有键盘控制。

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

import r;
public class Prog8{





public static void main(String[] args){




(

s=a+aa+aaa+aaaa+ ...
的值,请输入
a
的值:

Scanner scan = new Scanner().useDelimiter(
以空格作为分隔符

int a = t();
int n = t();
public static void main(String[] args){
n(
请输入一行字符:

Scanner scan = new Scanner();
String str = ne();
();
count(str);
}
//
统计输入的字符

private static void count(String str){












}
List list = new ArrayList();
char[] array_Char = Array();
for(char c:array_Char)
(f(c));//
将字符作为字符串添加到
list
表中

(list);//
排序

for(String s:list){





}
int begin = f(s);
int end = dexOf(s);
//
索引结束统计字符数

if((end)==s)
n(
字符‘

’有






























}


}
();//
关闭扫描器

n(expressed(2,5)+add(2,5));
//
求和表达式

private static String expressed(int a,int n){










}
//
求和

private static long add(int a,int n){







}
long sum = 0;
long subSUM = 0;
for(int i=1;i

}
return sum;
subSUM = subSUM*10+a;
sum = sum+subSUM;
StringBuffer sb = new StringBuffer();
StringBuffer subSB = new StringBuffer();
for(int i=1;i subSB = (a);
sb = (subSB);
if(i sb = (
}
(
return ng();
【程序
9


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

完数

。例如
6=1

2

3.
编程找出
1000
以内 的
所有完数。

public class Prog9{





public static void main(String[] args){


}
//
求完数

int n = 10000;
compNumber(n);


















}
private static void compNumber(int n){















}
int count = 0;
n(n+
以内的完数:

for(int i=1;i










}
int sum = 0;
for(int j=1;j





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


sum += j;
if(sum==i){
(i+
if((count++)%5==0)
n();
}

}
}
【程序
10


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


10
次落地时,< br>共经过多少米?第
10
次反弹多高?

import r;
public class Prog10{













public static void main(String[] args){






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

private static void distance(int h,int n){



double length = 0;
for(int i=0;i
length += h;
(
请输入小球落地时的高度和求解的次数:

Scanner scan = new Scanner().useDelimiter(
int h = t();
int n = t();
();
distance(h,n);








}
h /=2.0
n(
经过第

次反弹后,小球共经过

米,< br>


次反弹高
度为




}
【程序
11


题目:有
1

2

3

4
个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

程序分析:可填在百位、十位、个位的数字都是
1

2

3

4
。组成所有的排列后再去

掉不满足条件的排
列。

public class Prog11{




















}
【程序
12


题目:企业发放的奖金根据利润提成。 利润
(I)
低于或等于
10
万元时,奖金可提
10%
;利润 高于
10
万元,
低于
20
万元时,低于
10
万元的 部分按
10%
提成,高于
10
万元的部分,可可提成
7.5%

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

40
万到
60
万之间时高于
40< br>万元的部分,可提成
3%

60
万到
100

public static void main(String[] args){


















}
int count = 0;
int n = 0;
for(int i=1;i<5;i++){












}
n();
n(
符合条件的数共:



for(int j=1;j<5;j++){










}
if(j==i)
continue;
for(int k=1;k<5;k++){






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

n = i*100+j*10+k;
}
(n+
if((++count)%5==0)
n();
}

之间时,高 于
60
万元的部分,可提成
1.5%
,高于
100
万元时, 超过
100
万元的部分按
1%
提成,从键盘输
入当月利润
I
,求应发放奖金总数?

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

import .*;
public class Prog12{






































public static void main(String[] args){



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

private static String key_Input(){














}
//
计算奖金

private static long bonus(long profit){














long prize = 0;
long profit_sub = profit;
if(profit>1000000){



}
if(profit>600000){



}
if(profit>400000){

profit = profit_sub-400000;
profit = profit_sub-600000;
profit_sub = 600000;
prize += profit*0.015;
profit = profit_sub-1000000;
profit_sub = 1000000;
prize += profit*0.01;
String str = null;
BufferedReader bufIn = new BufferedReader(new InputStreamReader());
try{







}
return str;
str = ne();
tackTrace();
try{


}
();
tackTrace();
}catch(IOException e){
}catch(IOException e){
}finally{
(
请输入当前利润:

long profit = ong(key_Input());
n(
应发奖金:


















}
















}


}
profit_sub = 400000;
prize += profit*0.03;
if(profit>200000){



}
if(profit>100000){



}
prize += profit_sub*0.1;
return prize;
profit = profit_sub-100000;
profit_sub = 100000;
prize += profit*0.075;
profit = profit_sub-200000;
profit_sub = 200000;
prize += prize*0.05;
【程序
13

题目:一个整数,它加上
100
后是一个完全平方数,再加上
168
又是 一个完全平方数,请问该数是多少?

程序分析:在
10
万以内判断,先将该 数加上
100
后再开方,再将该数加上
268
后再开方,如果开方后的结果满足如下条件,即是结果。

public class Prog13{
















public static void main(String[] args){








}
//
判断完全平方数

private static boolean isCompSqrt(int n){




boolean isComp = false;
for(int i=1;i<(n)+1;i++){


if(n==(i,2)){

isComp = true;
int n=0;
for(int i=0;i<100001;i++){




}
n(
所求的数是:

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


}
n = i;
break;






}




}


}

}
break;
return isComp;
【程序
14


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

程序分析:以
3

5
日为例,应该先把前两个月的加起来,然后再加上
5
天即本年的 第几天,特殊情况,
闰年且输入月份大于
3
时需考虑多加一天。

import r;
public class Prog14{



















}
【程序
15


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

程 序分析:我们想办法把最小的数放到
x
上,先将
x

y
进行 比较,如果
x>y
则将
x

y
的值进行交换,
然后 再用
x

z
进行比较,如果
x>z
则将
x

z
的值进行交换,这样能使
x
最小。

public static void main(String[] args){







}
//
判断天数

private static int analysis(int year, int month, int date){







}
int n = 0;
int[] month_date = new int[] {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(int i=0;i n += month_date[i];
return n+date;
Scanner scan = new Scanner().useDelimiter(
匹配非数字

(
请输入当 前日期(年
-

-
日)
:
int year = t();
int month = t();
int date = t();
();
n(
今天是

年的第




import r;
public class Prog15{






























}
【程序
16


题目:输出
9*9
口诀。

程序分析:分行与列考虑,共
9

9
列,
i
控制行 ,
j
控制列。

public static void main(String[] args){







}
//
比较两个数的大小

private static String sort(int x,int y,int z){


















}
String s = null;
if(x>y){



}
if(x>z){



}
if(y>z){



}
s = x+
return s;
int t = z;
z = y;
y = t;
int t = x;
x = z;
z = t;
int t = x;
x = y;
y = t;
Scanner scan = new Scanner().useDelimiter(
(
请输入三个数:

int x = t();
int y = t();
int z = t();
();
n(
排序结果:


public class Prog16{







}
【程序
17


题目:猴子吃桃问题:猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个
< br>第二天早上又
将剩下的桃子吃掉一半,
又多吃了一个。
以后每天早上都吃了前一 天剩下的一半零一个。
到第
10
天早上想
再吃时,见只剩下一个桃子了。求第 一天共摘了多少。

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

public class Prog17{






}
【程序
18


题目:两个乒乓球队进行比 赛,各出三人。甲队为
a,b,c
三人,乙队为
x,y,z
三人。已抽签决定 比赛名单。
有人向队员打听比赛的名单。
a
说他不和
x
比,
c
说他不和
x,z
比,请编程序找出三队赛手的名单。

import ist;
public class Prog18{









String a,b,c;//
甲队成员

public static void main(String[] args){







String[] racer = {
乙队成员

ArrayList arrayList = new ArrayList();
for(int i=0;i<3;i++)
for(int j=0;j<3;j++)
for(int k=0;k<3;k++){

Prog18 prog18 = new Prog18(racer[i],racer[j],racer[k]);

if(!(prog18.b) && !(prog18.c)
public static void main(String[] args){

int m = 1;
public static void main(String[] args){





}
for(int i=1;i<10;i++){



}
for(int j=1;j
(j+
n();
for(int i=10;i>0;i--)
m = 2*m + 2;
n(
小猴子共摘了

桃子

}

&& !(prog18.c) &&















}
【程序
19


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

*
***
******
********
******
***
*
程序分析:先把图形分成两部分来看待,前四行一个规律,后三行一个规律,利用双重
for
循环,第一层
控制行,第二层控制列。

public class Prog19{







public static void main(String[] args){


}
//
打印星星

private static void printStar(int n){

//
打印上半部分

int n = 5;
printStar(n);





}
//
构造方法

private Prog18(String a,String b,String c){



}
public String toString(){

}
return
的对手是

的对手是

的对手是

this.a = a;
this.b = b
this.c = c;

!(

(prog18);
}
for(Object obj:arrayList)
n(obj);






















}




















}
for(int i=0;i
for(int j=0;j<2*n;j++){

if(j
(

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

(
}
n();
}
//
打印下半部分

for(int i=1;i


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

if(j
(

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

(


}
}
n();
【程序
20


题目:有一分数序列:
2/1

3/2

5/3

8/5

13 /8

21/13...
求出这个数列的前
20
项之和。

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

public class Prog20{










public static void main(String[] args){









double n1 = 1;
double n2 = 1;
double fraction = n1/n2;
double Sn = 0;
for(int i=0;i<20;i++){
double t1 = n1;
double t2 = n2;
n1 = t1+t2;
n2 = t1;






}




}
fraction = n1/n2;
Sn += fraction;
}
(Sn);
【程序
21


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

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

public class Prog21{













}
【程序
22


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


程序分析:递归公式:
fn=fn_1*4!
public class Prog22{








public static void main(String[] args){

}
//
递归求阶乘

private static long fact(int n){



if(n==1)
return 1;
else
n(fact(10));
public static void main(String[] args){




}
//
阶乘

private static long factorial(int n){




}
int mult = 1;
for(int i=1;i mult *= i;
return mult;
long sum = 0;
for(int i=0;i<20;i++)
sum += factorial(i+1);
n(sum);



}

}
return fact(n-1)*n;
【程序
23


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

人大
2
岁。问第三个人,又说比第
2
人 大两岁。问第
2
个人,说比第一个人大两岁。最后问第一个人,他
说是
10< br>岁。请问第五个人多大?

程序分析:利用递归的方法,递归分为回推和递推两个阶段 。要想知道第五个人岁数,需知道第四人的岁
数,依次类推,推到第一人(
10
岁), 再往回推。

public class Prog23{










}
【程序
24


题目:给一个不多于
5
位的正整数 ,要求:一、求它是几位数,二、逆序打印出各位数字。

public class Prog24{












public static void main(String[] args){











int n = nt(args[0]);
int i = 0;
int[] a = new int[5];
do{

a[i] = n%10;
public static void main(String[] args){

}
//
求第
m
位同志的年龄

private static int getAge(int m,int n){




}
if(m==1)
return 10;
else
return getAge(m-1,n)+n;


n(getAge(5,2));
n /= 10;
++i;
}while(n!=0);
(
这是一个

位数,从个位起,各位数 字依次为:

for(int j=0;j (a[j]+


}
}
【程序
25


题目:一个< br>5
位数,判断它是不是回文数。即
12321
是回文数,个位与万位相同,十位 与千位相同。

import .*;
public class Prog25{






























public static void main(String[] args){















}
private static void palin(int n){












int m = n;
int[] a = new int[5];
if(n<10000 || n>99999){


n(
输入的不是
5
位数!

return;
int n = 0;
(
请输入一个
5
位数:

BufferedReader bufin = new BufferedReader(new InputStreamReader());
try{
n = nt(ne());
}catch(IOException e){

tackTrace();
}finally{





}
palin(n);
try{
();
}catch(IOException e){

}
tackTrace();
}else{
for(int i=0;i<5;i++){


}
if(a[0]==a[4] && a[1]==a[3])
n(m+
是一个回文数

a[i] = n%10;
n /= 10;

狗猫鼠主要内容-


狗猫鼠主要内容-


狗猫鼠主要内容-


狗猫鼠主要内容-


狗猫鼠主要内容-


狗猫鼠主要内容-


狗猫鼠主要内容-


狗猫鼠主要内容-