java基础50道经典练习题及答案
温柔似野鬼°
685次浏览
2021年01月25日 13:34
最佳经验
本文由作者推荐
狗猫鼠主要内容-
沃克
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
//
遍历字符串数组中的元素
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
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
sb = (subSB);
if(i
}
(
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
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
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
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;