Java学习-基础篇(4)(循环解题集 更新中...)

    科技2025-05-20  69

    基础(4)目录

    循环题1001、打印九九乘法表2、输入两个正整数m和n,求其最大公约数和最小公倍数3、搬砖问题4、猴子吃桃问题5、打印金字塔型的数字6、完全平方数7、兔子繁殖问题8、年历9、三角形10、数组生成后查找以及排序11、奇数偶数分离(二分法思想)

    循环题100

    1、打印九九乘法表

    import java.text.MessageFormat; public class Practise100 { public static void main(String[] args){ for (int i = 1,sum; i <10 ; i++) { for (int j = 1; j <=i ; j++) { sum=j*i; System.out.print(MessageFormat.format("{0}*{1}+{2}",i,j,i*j)); } System.out.println(); } } }

           代码运行结果:

    1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 4*1=4 4*2=8 4*3=12 4*4=16 5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81

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

    import java.util.Scanner; public class Practise100 { public static void main(String[] args){ Scanner input = new Scanner(System.in); System.out.print("请输入m的大小:"); int max = input.nextInt(); System.out.print("请输入n的大小:"); int min = input.nextInt(); for (int i = min; i >0 ; i--) { if(min%i==0 && max%i==0){ System.out.print("m和n的最大公约数为:"+i); break; } } System.out.println(); for (int i = 1; i<=min ; i++) { int k=max*i; if(k%min==0){ System.out.print("m和n的最小公倍数为:"+(max*i)); break; } } } }

           代码运行结果:

    请输入m的大小:36 请输入n的大小:9 m和n的最大公约数为:9 m和n的最小公倍数为:36 Process finished with exit code 0

    3、搬砖问题

           搬砖问题:36 块砖,36 人搬,男搬 4,女搬 3,两个小孩抬 1 砖,要求一次全搬完,问男、女和小孩各若干?

    import java.text.MessageFormat; public class Practise100 { public static void main(String[] args){ int a,b,c=0; for ( a=9,b=12; a>0 ; a--) { if(4*a+3*b+0.5*(36-a-b)!=36){ if(b>0){ b--; a++;}else{ a--; b=12; } }else { c=36-a-b; System.out.print(MessageFormat.format("需要男人{0}个,女人{1}个,小孩{2}个",a,b,c)); } } } }

           代码运行结果:

    需要男人3个,女人3个,小孩30个

    4、猴子吃桃问题

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

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

           代码运行结果:

    3070

    5、打印金字塔型的数字

    import java.util.Scanner; public class Practise100 { public static void main(String[] args){ Scanner input = new Scanner(System.in); System.out.print("请输入您需要打印数字金字塔的高度:"); int height= input.nextInt(); double y=0,z=0; for (int i = 0; i <= height-1; i++) { for (int n = height-1-i; n >0 ; n--) { System.out.print("\t"); } for (int j = 0; j <= i; j++) { y = Math.pow(2, j); System.out.print((int) y + "\t"); if (i == j) { for (int k = j; k >= 0; k--) { z = Math.pow(2, k-1); if(k>0){ System.out.print((int)z+ "\t"); }else if(k==1) { System.out.print((int)z+"\n"); } } } }System.out.println(); } } }

           代码运行结果:

    请输入您需要打印数字金字塔的高度:8 1 1 2 1 1 2 4 2 1 1 2 4 8 4 2 1 1 2 4 8 16 8 4 2 1 1 2 4 8 16 32 16 8 4 2 1 1 2 4 8 16 32 64 32 16 8 4 2 1 1 2 4 8 16 32 64 128 64 32 16 8 4 2 1

    6、完全平方数

           一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?(完全平方指用一个整数乘以自己例如11,22,3*3等,依此类推。若一个数能表示成某个整数的平方的形式,则称这个数为完全平方数。)

    import java.util.Scanner; public class Practise100 { public static void main(String[] args){ for (int j = 11; j<10000; j++) { for (int i = 0; i <10000; i++) { if(j*j==i+100){ for (int k = 17; k <10000; k++) { if(k*k==i+100+168){ System.out.print(i+"\t"); } } } } } } }

           代码运行结果:

    21 261 1581

    7、兔子繁殖问题

           有个人想知道,一年之内一对兔子能繁殖多少对?于是就筑了一道围墙把一对兔子关在里面。已知一对兔子每个月可以生一对小兔子,而一对兔子从出生后第3个月起每月生一对小兔子。假如一年内没有发生死亡现象,那么,一对兔子一年内(12个月)能繁殖成多少对?

    import java.util.Scanner; public class Practise100 { int[] arr= new int[13] ; arr[0] =1; arr[1] =2; arr[2] =3; arr[3] =4; for (int i = 4; i <= arr.length-1; i++) { arr[i]= arr[i-3]*2+(arr[i-1]-arr[i-3]); } System.out.print("一对兔子12个月能繁殖成"+arr[11]+"对"); } }

           代码运行结果:

    一对兔子12个月能繁殖成88对

    8、年历

    import java.util.Scanner; public class Practise100 { //先算距起始年份的整年的总天数 Scanner input = new Scanner(System.in); System.out.print("请输入需要打印日历的年份:"); int year =input.nextInt(); int sum=0; boolean isLeadYear2= (year%4==0&&year%100!=0)||year%400==0; for (int i = 1900; i<year; i++) { boolean isLeadYear= (i%4==0&&i%100!=0)||i%400==0; sum += isLeadYear?366:365; } int count=sum%7; //开始打印 for (int i = 1; i <=12 ; i++) { int day=0; System.out.println(); System.out.println(year + "年" + i + "月"); System.out.println("一\t二\t三\t四\t五\t六\t日"); //算出每个月1号前需要空几格 for (int k = count % 7 ; k > 0; k--) { if (k == 0) { break; } else { System.out.print("\t"); } } //判断每个月的天数 switch(i){ case 1: case 3: case 5: case 7: case 8: case 10: case 12: day=31; break; case 4: case 6: case 9: case 11: day=30; break; case 2: day=isLeadYear2?29:28; break; } //打印时每行七个,打印至月底换行退出 for (int j = 1; j <=day ; j++) { //每个月1号直接接着上个月的空格后输入即可 if(j==1){ System.out.print(j); }else { if ((j + count) % 7 == 1) { System.out.print("\n" + j); } else { System.out.print("\t" + j); } } } count += day; System.out.println(); } } }

           代码运行结果:

    请输入需要打印日历的年份:2003 2003年1月 一 二 三 四 五 六 日 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 2003年2月 一 二 三 四 五 六 日 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 2003年3月 一 二 三 四 五 六 日 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 2003年4月 一 二 三 四 五 六 日 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 2003年5月 一 二 三 四 五 六 日 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 2003年6月 一 二 三 四 五 六 日 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 2003年7月 一 二 三 四 五 六 日 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 2003年8月 一 二 三 四 五 六 日 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 2003年9月 一 二 三 四 五 六 日 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 2003年10月 一 二 三 四 五 六 日 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 2003年11月 一 二 三 四 五 六 日 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 2003年12月 一 二 三 四 五 六 日 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31

    9、三角形

           循环使用方法:(D*i+X)=Y(i↑    y↑)        (X-D*i)=Y (i↑    y↓)

    import java.util.Scanner; public class Practise100 { //倒置直角 for (int i = 1; i <=5 ; i++) { for (int j = 1; j <=6-i ; j++) { System.out.print("*"); }System.out.println(); } System.out.println(); //倒置等边 for (int j = 1; j <=5 ; j++) { for(int i=1;i<=j-1;i++){ System.out.print(" "); } for (int k = 0; k <11-2*j; k++) { System.out.print("*"); } System.out.println(); } System.out.println(); //倒置等边掏空 for (int j = 1; j <=5 ; j++) { for(int i=1;i<=j-1;i++){ System.out.print(" "); } for (int k = 1; k <=11-2*j; k++) { boolean first = j==1 ||j==5 || k==1 || k==11-2*j; System.out.print(first?"*":" "); } System.out.println(); } System.out.println(); //菱形上下分开写 for (int i = 1; i <=5 ; i++) { for (int j = 1; j <=5-i ; j++) { System.out.print(" "); } for (int j = 1; j <=2*i-1 ; j++) { System.out.print("*"); }System.out.println(); } for (int j = 1; j <=4 ; j++) { for(int i=1;i<=j;i++){ System.out.print(" "); } for (int k = 0; k <9-2*j; k++) { System.out.print("*"); } System.out.println(); } System.out.println(); //菱形整体一起写 for (int i = 1,k=1; i>=1; i=k++<5 ? ++i :--i) { for (int j = 1; j <= 5-i ; j++) { System.out.print(" "); } for (int j = 1; j <= 2*i-1; j++) { System.out.print("*"); } System.out.println(); } System.out.println(); //菱形(对称写法)上下对称 for (int i = -4; i <=4 ; i++) { for (int j = 1; j <=Math.abs(i) ; j++) { System.out.print(" "); } for (int j = 1; j <=9-2*Math.abs(i) ; j++) { boolean first = Math.abs(i)==4|| j==1||j==9-2*Math.abs(i); System.out.print(first?"*":" "); }System.out.println(); } System.out.println(); //沙漏(对称) for (int i = -4; i <=4 ; i++) { for (int j = 1; j <=4-Math.abs(i) ; j++) { System.out.print(" "); } for (int j = 1; j <=2*Math.abs(i)+1 ; j++) { System.out.print("*"); }System.out.println(); }; System.out.println(); //沙漏掏空 for (int i = -4; i <=4 ; i++) { for (int j = 1; j <=4-Math.abs(i) ; j++) { System.out.print(" "); } for (int j = 1; j <=2*Math.abs(i)+1 ; j++) { boolean first= Math.abs(i)==4||Math.abs(i)==0||j==2*Math.abs(i)+1||j==1; System.out.print(first?"*":" "); }System.out.println(); } } }

           代码运行结果:

    ***** **** *** ** * ********* ******* ***** *** * ********* * * * * * * * * *** ***** ******* ********* ******* ***** *** * * *** ***** ******* ********* ******* ***** *** * * * * * * * * * * * * * * * * * ********* ******* ***** *** * *** ***** ******* ********* ********* * * * * * * * * * * * * * *********

    10、数组生成后查找以及排序

           随机生成100个数,任何单值重复不超过两次,取值1~50之间的整数;找出数组中所有数值中不重复的质数;用插入排序法为数组中的数值升序排序

           第一种方法

    public class Practise100 { public static void main(String[] args){ //第一种方法 //生成数组 for (int i = 0,t,count; i <100; i++) { count=0; t= 1+ rand.nextInt(50); for (int j = 0; j < i; j++) { if(arr[j]==t) { count++; } } if(count<2){ arr[i]=t; }else{ i--; } } for (int i : arr) { System.out.print(i+"\t"); } System.out.println(); System.out.println(); //找出不重复的质数 int[] arr1 = new int[N]; for (int i = 0,count,count1=0; i < arr.length; i++) { count = 0; count1 = 0; for (int j = 1; j <= arr[i]; j++) { if (arr[i] % j == 0) { count++; } } if (count < 3 && count > 1) { for (int k = 0; k < arr1.length; k++) { if(arr1[k]==arr[i]){ count1++; } } }else{ continue; } if(count1==0){arr1[i]=arr[i];} } for (int i = 0; i < arr1.length; i++) { if(arr1[i]!=0) System.out.print(arr1[i]+"\t"); } System.out.println(); System.out.println(); //插入排序(降序排序) for (int i = 1,j,t; i <= arr.length-1; i++) { t=arr[i]; for ( j = i-1; j >=0 && arr[j]< t ; j--) { arr[j+1]=arr[j]; } arr[j+1] =t; } for (int i : arr) { System.out.print(i+"\t"); } } }

           第二种方法

    import java.util.Random; public class Practise100 { public static void main(String[] args){ //第二种方法 //生成数组 Random rand = new Random(); final int N =100; int[] uqarr= new int[N]; int[] uqcnt= new int[N]; int[] arr = new int[N]; int ix=0; for (int i = 0,t,tx; i < arr.length;) { t=1+rand.nextInt(50); tx=-1; for (int j = 0; j <ix ; j++) { if(t==uqarr[j]){ tx=j; break; } } if(tx!=-1 &&uqcnt[tx]>=2){ continue;} arr[i++]=t; if(tx==-1){ uqarr[ix]=t; uqcnt[ix++]++; }else{uqcnt[tx]++;} } for (int i = 0; i < ix ; i++) { System.out.println(uqarr[i]+":"+uqcnt[i]); } for (int i : arr) { System.out.print(i+"\t"); } System.out.println(); System.out.println(); //找出不重复的质数 for (int i = 0,t=0; i < ix; i++) { if(uqarr[i]==1)continue; t=uqarr[i]; boolean isPrime = true; for (int j = 2; j <=Math.sqrt(t) ; j++) { if(t%j==0){ isPrime=false; break; } } if(isPrime==true){ System.out.print(t+"\t"); } } System.out.println(); System.out.println(); //插入排序(降序排序) for (int i = 1,j,t; i <= arr.length-1; i++) { t=arr[i]; for ( j = i-1; j >=0 && arr[j]< t ; j--) { arr[j+1]=arr[j]; } arr[j+1] =t; } for (int i : arr) { System.out.print(i+"\t"); } } }

           代码运行结果:

    16 50 33 10 12 33 6 7 42 18 23 34 21 15 27 4 39 37 8 24 12 36 44 28 4 45 37 15 22 43 40 30 46 48 42 46 49 11 14 31 14 19 44 34 38 2 3 38 5 9 20 35 18 47 31 5 48 17 28 19 20 27 6 11 36 3 22 47 40 49 32 17 13 2 30 1 7 41 24 16 23 25 1 10 41 50 32 25 9 21 45 43 8 35 29 39 29 13 26 26 7 23 37 43 11 31 19 2 3 5 47 17 13 41 29 50 50 49 49 48 48 47 47 46 46 45 45 44 44 43 43 42 42 41 41 40 40 39 39 38 38 37 37 36 36 35 35 34 34 33 33 32 32 31 31 30 30 29 29 28 28 27 27 26 26 25 25 24 24 23 23 22 22 21 21 20 20 19 19 18 18 17 17 16 16 15 15 14 14 13 13 12 12 11 11 10 10 9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1

    11、奇数偶数分离(二分法思想)

           随机生成一个长度为20,取值1~100之内的整数数组,将其中奇偶数分离出来,奇左偶右?

    import java.util.Random; public class Practise100 { public static void main(String[] args){ int[] arr = new int[20]; Random rand = new Random(); for (int i = 0; i < arr.length; i++) { arr[i] = 1 + rand.nextInt(100); } int begin = 0, end = arr.length - 1,t; while (begin < end) { if (arr[end] % 2 == 0) { end--; } else { if (arr[begin]%2==1) { begin++; }else{ t=arr[begin]; arr[begin]=arr[end]; arr[end]=t; } } } for (int i : arr) { System.out.print(i+"\t"); } } }

           代码运行结果:

    35 27 85 85 45 15 67 35 87 79 95 74 22 68 100 28 40 32 28 66
    PS:作者是一枚刚入编程的小白,如果有写错或者写的不好的地方,欢迎各位大佬在评论区留下宝贵的意见或者建议,敬上!如果这篇博客对您有帮助,希望您可以顺手帮我点个赞!不胜感谢!

    原创作者:wsjslient

    作者主页:https://blog.csdn.net/wsjslient


    Processed: 0.012, SQL: 8