Java 基础练习题(50)

时间:2023-02-22 14:48:59

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

import java.util.Scanner;

/**
* 1、题目:古典问题:有一对兔子,
* 从出生后第3个月起每个月都生一对兔子,
* 小兔子长到第三个月后每个月又生一对兔子,
* 假如兔子都不死,问每个月的兔子总数为多少?
* @author ztw
*
*/
public class Practice01 {

public static void main(String[] args) {
int rabbit1= 1,rabbit2=1,rabbitsum=0;

for(int i=1;i<=12;i++){
rabbit1 = rabbit2;
rabbit2 = rabbitsum;
rabbitsum = rabbit1+rabbit2;

System.out.println(i+"个月后有"+rabbitsum+"对兔子");
}
}
}

2、题目:判断101-200之间有多少个素数,并输出所有素数。 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除, 则表明此数不是素数,反之是素数。

package com.hz.test;

/**
* 【程序2】
* 题目:判断101-200之间有多少个素数,并输出所有素数。
* 程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),
* 如果能被整除, 则表明此数不是素数,反之是素数。
* @author ztw
*
*/
public class Practice02 {

public static void main(String[] args) {
for(int i=101;i<200;i++){
for(int j=2;j<=i;j++){
if(i%j==0&&i!=j){
break;
}
if(i%j==0&&i==j){
System.out.println(i);
}
}
}
}
}

3、题目:打印出所有的 “水仙花数 “, 所谓 “水仙花数 “是指一个三位数, 其各位数字立方和等于该数本身。例如:153是一个 “水仙花数 “,因为153=1的三次方+5的三次方+3的三次方。

package com.hz.test;

/**
* 【程序3】
* 题目:打印出所有的 "水仙花数 ",
* 所谓 "水仙花数 "是指一个三位数,
* 其各位数字立方和等于该数本身。
* 例如:153是一个 "水仙花数 ",
* 因为153=1的三次方+5的三次方+3的三次方。
* @author ztw
*
*/
public class Practice03 {

public static void main(String[] args) {
int b,s,g;
for(int i=100;i<1000;i++){
b = i/100;
s = i%100/10;
g = i%10;

if(b*b*b+s*s*s+g*g*g==i){
System.out.println(i);
}
}
}
}

4、题目:将一个正整数分解质因数。例如:输入90一个最小的质数k,然后按下述步骤完成:
*(1)如果这个质数恰等于n,则说明分解,打印出90=2*3*3*5。
*程序分析:对n进行分解质因数,应先找到质因数的过程已经结束,打印出即可。
*(2)如果n <> k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
*(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

package com.hz.test;

import java.util.Scanner;

/**
* 【程序4】
*题目:将一个正整数分解质因数。例如:输入90一个最小的质数k,然后按下述步骤完成:
*(1)如果这个质数恰等于n,则说明分解,打印出90=2*3*3*5。
*程序分析:对n进行分解质因数,应先找到质因数的过程已经结束,打印出即可。
*(2)如果n <> k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,重复执行第一步。
*(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
* @author ztw
*
*/
public class Practice04 {

public static void main(String[] args) {
int k = 2;//最小的质数
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个正整数:");
int number = sc.nextInt();
System.out.print(number+"=");
while(number>k){
if(number%k==0){
System.out.print(k+"*");
number=number/k;
}else{
k++;
}
}
System.out.println(k);


}

}

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

package com.hz.test;

import java.util.Scanner;

/**
* 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
* @author ztw
*
*/
public class Practice05 {

public static void main(String[] args) {
//题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
int m,n;
Scanner sc = new Scanner(System.in);
System.out.print("请输入两个正整数:");
m = sc.nextInt();
n = sc.nextInt();
int a=m;
int b=n;
int temp;
if(m<n){
temp = m;
m = n;
n = temp;
}
while(n!=0){
temp=m%n;
m = n;
n = temp;
}

System.out.println("最大公约数:"+m);
System.out.println("最小公倍数:"+a*b/m);

}
}

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

package com.hz.test;

import java.util.Scanner;

/**
* 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
* @author ztw
*
*/
public class Practice06 {

public static void main(String[] args) {
//题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
int en=0,space=0,num=0,other=0;
Scanner sc = new Scanner(System.in);
System.out.println("请输入一行字符");
String str = sc.next();
char[] ch=str.toCharArray();
for(int i=0;i<ch.length;i++){
if(Character.isDigit(ch[i])){
num++;
}else if(Character.isSpaceChar(ch[i])){
space++;
}else if(Character.isLetter(ch[i])){
en++;
}else{
other++;
}
}
System.out.println("其中英文字母"+en+"、空格"+space+"、数字"+num+"和其它字符"+other+"的个数");
}
}

7、题目:求s=a+aa+aaa+aaaa+aa…a的值, 其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

package com.hz.test;

import java.util.Scanner;

/**
* 题目:求s=a+aa+aaa+aaaa+aa...a的值,
* 其中a是一个数字。例如2+22+222+2222+22222
* (此时共有5个数相加),几个数相加有键盘控制。
* @author ztw
*
*/
public class Practice07 {

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入数字:");
int number = sc.nextInt();
int s = 0;
for(int i=number;i>0;i--){
s+=i * number * Math.pow(10, (number - i));
}
System.out.println("s="+s);
}
}

8、题目:一个数如果恰好等于它的因子之和, 这个数就称为 “完数 “。例如6=1+2+3.编程 找出1000以内的所有完数。

package com.hz.test;

/**
* 题目:一个数如果恰好等于它的因子之和,
* 这个数就称为 "完数 "。例如6=1+2+3.
* 编程 找出1000以内的所有完数。
* @author ztw
*
*/
public class Practice08 {

public static void main(String[] args) {
//题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程 找出1000以内的所有完数。
int s;
for(int i=1;i<=1000;i++){
s = 0;
for(int j=1;j<i;j++){
if(i%j==0){
s+=j;
}
}
if(s==i){
System.out.print(i+" ");
}

}
}
}

9、 题目:一个数如果恰好等于它的因子之和, 这个数就称为 “完数 “。例如6=1+2+3.编程 找出1000以内的所有完数。

package com.hz.test;

/**
* 题目:一个数如果恰好等于它的因子之和,
* 这个数就称为 "完数 "。例如6=1+2+3.
* 编程 找出1000以内的所有完数。
* @author ztw
*
*/
public class Practice08 {

public static void main(String[] args) {
//题目:一个数如果恰好等于它的因子之和,这个数就称为 "完数 "。例如6=1+2+3.编程 找出1000以内的所有完数。
int s;
for(int i=1;i<=1000;i++){
s = 0;
for(int j=1;j<i;j++){
if(i%j==0){
s+=j;
}
}
if(s==i){
System.out.print(i+" ");
}

}
}
}

10、题目:有1、2、3、4四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?

package com.hz.test;

/**
* 题目:有1、2、3、4四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
* @author ztw
*
*/
public class Practice10 {

public static void main(String[] args) {
//题目:有1、2、3、4四个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
int x,y,z,sum=1;
for(x=1;x<=4;x++){
for(y=1;y<=4;y++){
for(z=1;z<=4;z++){
if(x!=y&&x!=z&&y!=z){
System.out.println("第"+sum+" : "+x+""+y+""+z);
sum++;
}
}
}
}
}
}

11、题目:企业发放的奖金根据利润提成。
* 利润(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%提成,从键盘输入当月利润,求应发放奖金总数?

 package com.hz.test;

import java.util.Scanner;

/**
* 题目:企业发放的奖金根据利润提成。
* 利润(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%提成,从键盘输入当月利润,求应发放奖金总数?
* @author ztw
*
*/
public class Practice11 {

/*
* 题目:企业发放的奖金根据利润提成。
* 利润(I)低于或等于10万元时,奖金bonus可提10%;
* 利润高于10万元,低于20万元时,低于10万元的部分按10%提成,
* 高于10万元的部分,可可提成7.5%;20万到40万之间时,
* 高于20万元的部分,可提成5%;40万到60万之间时高于40万元的部分,
* 可提成3%;60万到100万之间时,高于60万元的部分,可提成1.5%,
* 高于100万元时,超过100万元的部分按1%提成,从键盘输入当月利润profit,求应发放奖金总数?
*/
public static void main(String[] args) {
double bonus,tC1=0.1,tC2=0.075,tC3=0.05,tC4=0.03,tC5=0.015,tC6=0.01;
Scanner sc = new Scanner(System.in);
System.out.println("请输入当月利润:");
double profit = sc.nextDouble();
//低于10万元的部分按10%提成,高于10万元的部分,可可提成7.5%;
if(profit<=10){
bonus=profit*tC1;
}else if(profit>10&&profit<20){

bonus=((profit-10)*tC2)+(10*tC1);
}else if(profit>=20&&profit<40){

bonus=((profit-20)*tC3)+((profit-10)*tC2)+(10*tC1);
}else if(profit>=40&&profit<60){

bonus=((profit-40)*tC4)+((profit-10)*tC2)+(10*tC1);
}else if(profit>=60&&profit<100){

bonus=((profit-60)*tC5)+((profit-10)*tC2)+(10*tC1);;
}else{
bonus=((profit-100)*tC6)+((profit-10)*tC2)+(10*tC1);;
}
System.out.println("应发放奖金"+bonus+"万元");
}
}

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

package com.hz.test;

/**
* 题目:一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
* @author ztw
*
*/
public class Practice12 {

public static void main(String[] args) {
//题目:一个整数,它加上100后是一个完全平方数,
//再加上168又是一个完全平方数,请问该数是多少?
int number=0;
do{
//所有整数数%1,都等于0,如果不能完全开平方,为小数
if(Math.sqrt(number+100)%1==0&&Math.sqrt(number+168)%1==0){
System.out.println(number);
break;
}
number++;
}while(true);
}
}

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

package com.hz.test;

import java.util.Scanner;

/**
* 题目:输入三个整数x,y,z,请把这三个数由小到大输出。
* @author ztw
*
*/
public class Practice15 {
public static void main(String[] args) {
//题目:输入三个整数x,y,z,请把这三个数由小到大输出。
Scanner sc = new Scanner(System.in);
System.out.println("输入三个整数x,y,z:");
int x = sc.nextInt();
int y = sc.nextInt();
int z = sc.nextInt();
int max=x,min=x;
if(max<y&&y>z){
max=y;
}else if(max<y&&z>y){
max=z;
}
if(min>y&&y<z){
min=y;
}else if(min<y&&z<y){
min=z;
}
int temp = (x+y+z)-(max+min);
System.out.println(min+"<"+temp+"<"+max);

}

}

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

 package com.hz.test;
/**
* 题目:猴子吃桃问题:猴子第一天摘下若干个桃子,
* 当即吃了一半,还不瘾,又多吃了一个
* 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。
* 以后每天早上都吃了前一天剩下 的一半零一个。
* 到第10天早上想再吃时,见只剩下一个桃子了。求第一天共摘了多少。
* @author ztw
*
*/
public class Practice17 {

public static void main(String[] args) {
int sum=1;
for(int i=1;i<=10;i++){
sum=(sum+1)*2;
}
System.out.println(sum);
}
}

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

 package com.hz.test;

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

public static void main(String[] args) {
char a[]={'a','b','c'};
char b[]={'x','y','z'};
for(int i=0;i<a.length;i++){
for(int j=0;j<b.length;j++){
if(i==0&&j==0){
continue;
}
if(i==2&&j==0){
continue;
}
if(i==2&&j==2){
continue;
}
System.out.println(a[i]+" : "+b[j]);
}
}
}
}

19、题目:打印出杨辉三角形(要求打印出 10 行)

package com.hz.array;

import java.util.Scanner;

/**
* 1、题目:打印出杨辉三角形(要求打印出 10 行)
* @author ztw
*
*/
public class ZTWPractice17 {

public static void main(String[] args) {
/*
* /1、题目:打印出杨辉三角形(要求打印出 10 行)
* 1.程序分析:
* 1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
…………
*/
int[] a = new int[10];
for(int i=0;i<a.length;i++){
a[i] = 1;
}
System.out.println(1);
System.out.println(1 + "\t" + 1);
for (int i = 1; i < 10-1; i++) {
for (int j = i; j >= 1; j--) {
a[j] = a[j] + a[j - 1];
}
for(int k =0;k<i+2;k++){
System.out.print(a[k]+"\t");
}
System.out.println();
}
}
}

20、数学黑洞6174
* 已知:一个任意的四位正整数。将数字重新组合成一个最大的数和最小的数相减,重复
* 这个过程,最多七步,
* 必得6174。即:7641-1467=6174。将永远出不来。
* 求证:所有四位数数字(全相同的除外),均能得到6174。输出掉进黑洞的步数。

package com.hz.array;

import java.util.Arrays;
import java.util.Scanner;

/**
* 10、数学黑洞6174
* 已知:一个任意的四位正整数。将数字重新组合成一个最大的数和最小的数相减,重复
* 这个过程,最多七步,
* 必得6174。即:7641-1467=6174。将永远出不来。
* 求证:所有四位数数字(全相同的除外),均能得到6174。输出掉进黑洞的步数。
* @author ztw
*
*/
public class ZTWPractice14 {

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
do{
System.out.println("请输入任意(四位全相同的除外)的四位正整数:");
int number = sc.nextInt();
int g,s,b,q;
g = number%10;
s = (number%100)/10;
b = (number%1000)/100;
q = number/1000;
System.out.println("个位:"+g+"十位:"+s+"百位:"+b+"千位:"+q);
if(g==s&&g==b&&g==q){
System.out.println("请输入四位全相同的除外的四位正整数!!!");
continue;
}else{
int[] arr={g,s,b,q};
int numMax,numMin,sum;
//降序
Arrays.sort(arr);
System.out.print("位数排列降序后:");
for(int i=0;i<arr.length;i++){
System.out.print(+arr[i]+", ");
}
System.out.print("\n");
//升序

numMax = (arr[3]*1000)+(arr[2]*100)+(arr[1]*10)+(arr[0]);
numMin = (arr[0]*1000)+(arr[1]*100)+(arr[2]*10)+(arr[3]);

sum=numMax-numMin;
System.out.println("四位数组合的最大值-最小值"+sum);

if(sum==6174){
System.out.print("+ 1 +");
break;
}else{
for(int j=2;j<=7;j++){
g = sum%10;
s = (sum%100)/10;
b = (sum%1000)/100;
q = sum/1000;
System.out.println("个位:"+g+"十位:"+s+"百位:"+b+"千位:"+q);
int[] arr2={g,s,b,q};
Arrays.sort(arr2);
System.out.println();
numMax = (arr2[3]*1000)+(arr2[2]*100)+(arr2[1]*10)+(arr2[0]);
numMin = (arr2[0]*1000)+(arr2[1]*100)+(arr2[2]*10)+(arr2[3]);
sum=numMax-numMin;
System.out.println("四位数组合的最大值、最小值:"+numMax+","+numMin);
if(sum==6174){
System.out.print("第"+j+"步掉进黑洞");
break;
}else{
//System.out.println(sum);
continue;
}
}
}
break;
}
}while(true);
}
}

21、以逗号为分隔符,分割字符串”13,24,32,47,35,16,97,68,49”

package com.hz.array;

/**
* 7、以逗号为分隔符,分割字符串"13,24,32,47,35,16,97,68,49"
* @author ztw
*
*/
public class ZTWPractice11_1 {

public static void main(String[] args) {
//7、以逗号为分隔符,分割字符串"13,24,32,47,35,16,97,68,49"
String a = "13,24,32,47,35,16,97,68,49";
String b[] = a.split(",");//以“,”分隔
for (int i = 0; i < b.length; i++) {
System.out.print(b[i]+" ");
}
}
}

22、往数组int array[] = {1,2,3,4,5,6,7}第3个位置插入一个数8,最后的结果应该为{1,2,3,8,4,5,6,7}

package com.hz.array;

import java.util.Scanner;

/**
* 2、往数组int array[] = {1,2,3,4,5,6,7}第3个位置插入一个数8,最后的结果应该为{1,2,3,8,4,5,6,7}
* @author ztw
*
*/
public class ZTWPractice02 {

public static void main(String[] args) {
/*
* 2、往数组int array[] = {1,2,3,4,5,6,7}
* 第3个位置插入一个数8,最后的结果应该为{1,2,3,8,4,5,6,7}
*/
int array[] = {1,2,3,4,5,6,7};
int arr[] = new int[array.length+1];

Scanner sc = new Scanner(System.in);
System.out.print("请输入要插入的整数:");
int number = sc.nextInt();

for (int i = 0; i < array.length; i++) {
arr[i] = array[i];
}

for (int i = arr.length-1; i >=4; i--) {
int temp = arr[i];
arr[i] = arr[i-1];
arr[i-1] = temp;
if(i==4){
arr[i-1] = number;
//break;
}

}

for(int i = 0; i < arr.length; i++){
System.out.println(arr[i]);
}

}
}

简便方法:System.arraycopy(src, srcPos, dest, destPos, length)

//public static void main(String[] args) {
// int array[] = {1,2,3,4,5,6,7};
// int arr[] = new int[array.length+1];
//
// Scanner sc = new Scanner(System.in);
// System.out.print("请输入要插入的整数:");
// int number = sc.nextInt();
//
// System.arraycopy(array, 0, arr, 0, 3);
// arr[3] = number;
// System.arraycopy(array, 3, arr, 4, 4);
//
// for (int i = 0; i < arr.length; i++) {
// System.out.print(arr[i]+", ");
// }
// }

有一些是基础50题,还有几题是碰见有意思的题目