二白整理了一些关于循环结构的习题,本人也逐个完成,有需要的同学自取,答案仅供参考。
01:求10以内的偶数的和。
package practise;public class Demo01 {public static void main(String[] args) {// 01:求10以内的偶数的和。int x=0,sum=0 ;while (x<10){sum +=x;x++;x++;}System.out.println(sum);}
}
02:求100以内的所有素数
(素数:一个大于1的自然数,除了1和它本身外,不能被其他自然数整除)
package practise;public class Demo02 {public static void main(String[] args) {
// 02:求100以内的所有素数
//(素数:一个大于1的自然数,除了1和它本身外,不能被其他自然数整除)int i = 1,j =1;for (i=2;i<100;i++){for (j=2;j<=i;j++){if((i % j) == 0 && (i !=j)){System.out.println(i);break;}}}}
}
03:随机产生一个1-100之间的整数,看能几次猜中。要求:猜的次数不能超过7次,每次猜完之后都要提示“大了”或者“小了”。
package practise;import java.util.Scanner;public class Demo03 {public static void main(String[] args) {
// 03:随机产生一个1-100之间的整数,看能几次猜中。要求:猜的次数不能超过7次,每次猜完之后都要提示“大了”或者“小了”。Scanner scanner = new Scanner(System.in);System.out.println("请输入数字");int y = (int)(Math.random()*99 +1);System.out.println(y);int x = scanner.nextInt();int i = 0;while (i<7){if (x==y){System.out.println("猜对了");break;} else if (x>y) {System.out.println("猜大了");i++;x = scanner.nextInt();}else {System.out.println("猜小了");i++;x = scanner.nextInt();}}if (i>=7){System.out.println("猜的次数过多,捞的一");}}
}
04:写一个方法,此方法实现输出100-999之间的水仙花数。
package practise;public class Demo04 {// 04:写一个方法,此方法实现输出100-999之间的水仙花数。public static void main(String[] args) {for (int sum = 100; sum <= 999; sum++) {int a = sum / 100;int b = (sum - a * 100) / 10;int c = sum - a * 100 - b * 10;if (a * a * a + b * b * b + c * c * c == sum)System.out.println(sum);}}
}
05:输出小写的a-z以及大写的在Z—A
package practise;public class Demo05 {public static void main(String[] args) {
// 05:输出小写的a-z以及大写的在Z—Achar litter = 97;char big = 65;for (litter = 97; litter <123;litter++){System.out.print(litter);}for (big = 65; big <91;big++){System.out.print(big);}}
}
06:求出1-3+5-7+9-…..101的和
package practise;public class Demo06 {public static void main(String[] args) {
// 06:求出1-3+5-7+9-…..101的和int i =3;int j = 1;while (i<=101){int k=i+2;j=j-i+k;i=i+4;}System.out.println(j);}
}
07:求出1-1/2+1/3-1/4…..1/100的和
package practise;public class Demo07 {public static void main(String[] args) {
// 07:求出1-1/2+1/3-1/4…..1/100的和double j = 0;for (int i =1;i<=98;i+=2){j= j+(-1.0/(i+1)) +(1.0/(i+2));}System.out.println(j+1);/*double num = 1;// 定义个变量用来存储计算结果double sum = 0;// 设i为分母,分母的值范围从1-100,并且分母可以用来表示数据所处的位置,如果分母为奇数,说明数字也处在奇数位置,进行加法运算,如果分母为偶数,说明数字位置在偶数位置,进行减法运算for (int i = 1; i <= 100; i++) {if (i % 2 == 0) {sum -= num / i; // sum=sum-num/i;} else {sum += num / i; // sum=sum+num/i;}}System.out.println("1-1/2+1/3-1/4…..1/100的和是:" + sum);*/}}
08:输出20-80之间能被3整除的整数,每5个一行
package practise;public class Demo08 {public static void main(String[] args) {
// 08:输出20-80之间能被3整除的整数,每5个一行int k=0;for (int i =20;i<=80;i++){if (i%3==0){System.out.print(i+" ");k++;}if (k==5){System.out.println();k=0;}}}
}
09:打印出1000-2000年中所有的闰年,并以每行四个数的形式输出
package practise;public class Demo09 {public static void main(String[] args) {
// 09:打印出1000-2000年中所有的闰年,并以每行四个数的形式输出
// 普通闰年:能被 4 整除但不能被 100 整除的年份为普通闰年。
// 世纪闰年:能被 400 整除的为世纪闰年。for (int i =1000;i<=2000;i++){if (i%400==0){System.out.println(i);}else if (i%4 == 0 && i%100 !=0){System.out.println(i);}}}
}
10:定义两个整数a、b,a、b的取值范围在0-9之间,给出所有符合a+b=12的组合。
package practise;public class Demo10 {public static void main(String[] args) {
// 10:定义两个整数a、b,a、b的取值范围在0-9之间,给出所有符合a+b=12的组合。int a,b;for (a=0;a<10;a++){for (b=0;b<10;b++){if (a+b==12){System.out.println("a=:"+a+",b=:"+b);}}}}
}
11:A、B、C、D分别为0——9之间的整数,求出满足AB+CD=DA条件的数。
例如:90+09=99
package practise;public class Demo11 {public static void main(String[] args) {
// 11:A、B、C、D分别为0——9之间的整数,求出满足AB+CD=DA条件的数。
// 例如:90+09=99int a,b,c,d;for (a=0;a<10;a++){for (b=0;b<10;b++){for (c=0;c<10;c++){for (d=0;d<10;d++){if (a*10+b+c*10+d==d*10+a){System.out.println("a=:"+a+" b=:"+b +" c=:"+c +" d=:"+d);}}}}}}
}
12:随机生成一个五位以内的数,然后输出该数共有多少位,每位分别是什么
package practise;public class Demo12 {public static void main(String[] args) {
// 12:随机生成一个五位以内的数,然后输出该数共有多少位,每位分别是什么double x = Math.random()*99999;int a = (int) x;if (a<10){System.out.println("一位"+a);} else if (a<100) {int gewei = a%10;int shiwei = a/10;System.out.println("两位,个位和十位分别是"+gewei+"、"+shiwei);} else if (a<1000) {int gewei = a%100%10;int shiwei = a%100/10;int baiwei = a/100;System.out.println("三位,个位、十位和百位分别是"+gewei+"、"+shiwei+"、"+baiwei);} else if (a<10000) {int gewei = a%1000%100%10;int shiwei = a%1000%100/10;int baiwei = a%1000/100;int qianwei = a/1000;System.out.println("三位,个位、十位、百位和千位分别是"+gewei+"、"+shiwei+"、"+baiwei+"、"+qianwei);}else {int gewei = a%10000%1000%100%10;int shiwei = a%10000%1000%100/10;int baiwei = a%10000%1000/100;int qianwei = a%10000/1000;int wanwei = a/10000;System.out.println("三位,个位、十位、百位和千位分别是"+gewei+"、"+shiwei+"、"+baiwei+"、"+qianwei+"、"+wanwei);}}
}
13:输出九九乘法表
package practise;public class Demo13 {public static void main(String[] args) {
// 13:输出九九乘法表int i =1,j=1;for (i=1;i<10;i++){for (j=1;j<=i;j++){int cheng = i*j;System.out.print(i+"*"+j+"="+cheng+"\t");}System.out.println();}}
}
14:使用Java实现输出如下图形。
package practise;public class Demo14$1 {public static void main(String[] args) {
// 14:使用Java实现输出如下图形。(第一个)int i,j,k,l,m=2;for(i=1;i<=6;i+=2){for (l=m;l>=1;l--){System.out.print("\t");}m--;for (j=1,k=i;j<=i && k >= 0;j++,k--){System.out.print("*\t");}System.out.println();}}
}
package practise;public class Demo14$2 {public static void main(String[] args) {
// 14:使用Java实现输出如下图形。(第二个)int i,j,l,m=5,n=5,o=5;for (i=0;i<6;i++){//上部分for (l=m;l>=1;l--){//空格的个数System.out.print(" ");}m--;for (j=1;j<=(6+i);j++){//中间*的个数System.out.print("*");}for (int k =0;k<i;k++){//结尾新增加的*的个数System.out.print("*");}System.out.println();}for (i=0;i<5;i++){//下部分for (l=n;l<=5;l++){//空格的个数System.out.print(" ");}n--;for (j=1;j<=(9-i);j++){//中间*的个数System.out.print("*");}for (int k =0;k<o;k++){//结尾新增加的*的个数System.out.print("*");}o--;System.out.println();}}
}
package practise;public class Demo14$3 {public static void main(String[] args) {
// 14:使用Java实现输出如下图形。(第三个)int l = 7,m=1;int n =7,o=15;System.out.println(" *");//第一行for (int j=0;j<9;j++){for (int i =l;i>=0;i--){//第一部分空格个数System.out.print(" ");}l--;System.out.print("*");for (int k=1;k<=m;k++){//第二部分空格个数System.out.print(" ");}m+=2;System.out.print("*");System.out.println();}for (int j=0;j<8;j++){for (int i =n;i<=7;i++){//第一部分空格个数System.out.print(" ");}n--;System.out.print("*");for (int k=1;k<=o;k++){//第二部分空格个数System.out.print(" ");}o-=2;System.out.print("*");System.out.println();}System.out.println(" *");//最后一行}
}
package practise;public class Demo14$4 {public static void main(String[] args) {
// 14:使用Java实现输出如下图形。(第四个)int l=0;for (int i =1;i<=8;i++){for (int j =i;j<=7;j++){//左侧*个数System.out.print("*");}while (i>1){//确保第一格没有空格for (int k =2;k<i*2-1;k++){//中间空格个数System.out.print(" ");}break;}for (int j =i;j<=7;j++){//右侧*个数System.out.print("*");}System.out.println();}}
}
15:实现双色球的彩票功能。规则:从36个红球中随机选择不重复的6个数,从15个篮球中随机选择1个组成一注彩票。可以选择买多注。
package practise;import java.util.Scanner;public class Demo15 {public static void main(String[] args) {
// 15:实现双色球的彩票功能。规则:从36个红球中随机选择不重复的6个数,从15个蓝球中随机选择1个组成一注彩票。可以选择买多注。Scanner scanner = new Scanner(System.in);System.out.println("请输入你要买的注数");int num = scanner.nextInt();for (int i =1;i<=num;i++){int red1 = (int) (Math.random()*36+1);int blue =(int) (Math.random() * 15 + 1);int red2 = (int) (Math.random()*36+1);while(red2 == red1){red2 = (int) (Math.random()*36+1);}int red3 = (int) (Math.random()*36+1);while(red3 == red2 || red3 == red1){red3 = (int) (Math.random()*36+1);}int red4 = (int) (Math.random()*36+1);while(red4 == red1||red4==red2||red4==red3){red4 = (int) (Math.random()*36+1);}int red5 = (int) (Math.random()*36+1);while(red5 == red1||red5==red2||red5==red3||red5==red4){red5 = (int) (Math.random()*36+1);}int red6 = (int) (Math.random()*36+1);while(red6 == red1||red6==red2||red6==red3||red6==red4||red6==red5){red6 = (int) (Math.random()*36+1);}System.out.print(red1+" ");System.out.print(red2+" ");System.out.print(red3+" ");System.out.print(red4+" ");System.out.print(red5+" ");System.out.print(red6+" ");System.out.print(blue+" ");System.out.println();}}
}
16:输出1-100之间的不能被5整除的数,每5个一行。
package practise;public class Demo16 {public static void main(String[] args) {
// 16:输出1-100之间的不能被5整除的数,每5个一行。int j = 0;for (int i =1;i<=100;i++){while (j<4){ //四个数循环if (i%5!=0){//判断能否被5整除System.out.print(i+"\t");j++;i++;}}if (i<100){System.out.println("\n");j=0;}}}
}
17:输出斐波那契数列数列的前20项
package practise;public class Demo17 {public static void main(String[] args) {
// 17:输出斐波那契数列数列的前20项
// 这个数列从第3项开始 ,每一项都等于前两项之和int a1 = 1;int a2 = 1;int a3 = 3;System.out.print(a1+"、"+a2+"、"+a3+"、"); //输出前三个for (int i = 0;i<5;i++){//输出中间15个a1 = a2 + a3;a2 = a3 + a1;a3 = a1 + a2;System.out.print(a1+"、"+a2+"、"+a3+"、");}a1 = a2 + a3;a2 = a3 + a1;System.out.print(a1+"、"+a2);//输出最后两个}
}
18:输出一个整数的二进制数、八进制数、十六进制数。
package practise;import java.util.Scanner;public class Demo18 {public static void main(String[] args) {
// 18:输出一个整数的二进制数、八进制数、十六进制数。
// TODO: 2024/4/3 不用函数怎么写 Scanner sc = new Scanner(System.in);System.out.println("请输入一个整数:");int num = sc.nextInt();System.out.println("你输入的整数" + num + "转换为二进制为:" + Integer.toBinaryString(num));System.out.println("你输入的整数" + num + "转换为八进制为:" + Integer.toOctalString(num));System.out.println("你输入的整数" + num + "转换为十六进制为:" + Integer.toHexString(num));}
}
19:随机产生一个字母,如果是大写字母则输出“yes”,否则输出“no”
package practise;import java.util.Random;
import java.util.Scanner;public class Demo19 {public static void main(String[] args) {
// 19:随机产生一个字母,如果是大写字母则输出“yes”,否则输出“no”/*double y = Math.random()*25+65;//大写字母ASCII码表double n = Math.random()*25+97;//小写字母ASCII码表double x = ;char Y = (char) y;char N = (char) n;if (x == Y){System.out.println("yes");} else if (x==N) {System.out.println("no");}*/Random random = new Random();char letter = (char) (random.nextInt(57) + 'A');System.out.println("随机产生的字母是:" + letter);if (letter >= 'a' && letter <= 'z') {System.out.println("yes!");} else if (letter >= 'A' && letter <= 'Z') {System.out.println("no!");}}
}
20:随机产生一个字符,判断:如果为大写字母则输出“大写字母”;如果为小写字母则输出“小写字母”;否则怎输出“其他字符”;
package practise;import java.util.Random;public class Demo20 {public static void main(String[] args) {
// 20:随机产生一个字符,判断:如果为大写字母则输出“大写字母”;
// 如果为小写字母则输出“小写字母”;否则怎输出“其他字符”;Random random = new Random();char letter = (char) (random.nextInt(127));System.out.println("随机产生的字母是:" + letter);if (letter >= 'a' && letter <= 'z') {System.out.println("小写字符");} else if (letter >= 'A' && letter <= 'Z') {System.out.println("大写字符");}else {System.out.println("其他字符");}}
}
21:求100到1000之间的所有能被5和6整除的整数,每行显示5个
package practise;public class Demo21 {public static void main(String[] args) {
// 21:求100到1000之间的所有能被5和6整除的整数,每行显示5个int j =0;for (int i =100 ; i<=1000;i++){if (i%30==0){ //能被5和6整除for (j =0;j < 5;j++) {//5个数System.out.print(i+"\t");}}if (j==5){//五个数后换行System.out.println("\n");j=0;}}}
}
22:求和:1/3+3/5+5/7+7/9+………..+97/99
package practise;public class Demo22 {public static void main(String[] args) {
// 22:求和:1/3+3/5+5/7+7/9+………..+97/99double i=1.0;double sum =0;for (i=1;i<=93;i+=4){//除了最后一个double j=i+2.0;sum = sum + (i/j)+ ((i+2)/(j+2));}System.out.println(sum+97.0/99.0);//加上最后一个}
}
23:输出100以内的所有素数,每行显示5个;并求和。
package practise;public class Demo23 {public static void main(String[] args) {
// 23:输出100以内的所有素数,每行显示5个;并求和。int i = 1,j =1;int k = 0;for (i=2;i<100;i++){for (j=2;j<=i;j++){if((i % j) == 0 && (i !=j)){System.out.print(i+"\t");k++;if (k==5){k=0;System.out.println("\n");}break;//跳出当前for循环,回到最开始for循环}}}}}
24:山上有一口缸可以装50升水,现在有15升水。老和尚叫小和尚下山挑水,每次可以挑5升。问:小和尚要挑几次水才可以把水缸挑满?通过编程解决这个问题。
提示:
(1) 用整型变量water表示水缸里的水“int water = 15;”。
(2) 用整型变量l表示小和尚下山挑水的次数“int l = 0;”。
(3) 分析循环条件(水少于50升),循环操作(水增加5升,挑水次数增加1)。
(4) 套用while循环(或do-while循环)写出代码。
package practise;public class Demo24 {public static void main(String[] args) {
// 24:山上有一口缸可以装50升水,现在有15升水。老和尚叫小和尚下山挑水,每次可以挑5升。问:小和尚要挑几次水才可以把水缸挑满?通过编程解决这个问题。
// 提示:
// (1) 用整型变量water表示水缸里的水“int water = 15;”。
// (2) 用整型变量l表示小和尚下山挑水的次数“int l = 0;”。
// (3) 分析循环条件(水少于50升),循环操作(水增加5升,挑水次数增加1)。
// (4) 套用while循环(或do-while循环)写出代码。int water1 = 15;int water = 0;int l =0;while (water !=50){l++;water = water1 + l*5;}System.out.println(l);}
}
25:李白无事街上走,提壶去买酒。遇店加一倍,见花喝一斗,五遇花和店,喝光壶中酒,试问李白壶中原有多少斗酒?(使用for循环结构编程实现)
提示:采用逆向思维分析问题。
package practise;public class Demo25 {public static void main(String[] args) {
// 25:李白无事街上走,提壶去买酒。遇店加一倍,见花喝一斗,
// 五遇花和店,喝光壶中酒,试问李白壶中原有多少斗酒?
// (使用for循环结构编程实现)
// 提示:采用逆向思维分析问题。double wine=0;for(int a=1;a<=5;a++){wine+=1;wine=wine/2;}System.out.println("共有"+wine+"斗酒");}}
26:开发一个标题为“FlipFlop”的游戏应用程序。它从1计数到100,遇到3的倍数就替换为单词“Flip”,5的倍数就替换为单词“Flop”,既为3的倍数又为5的倍数则替换为单词“FlipFlop”。
package practise;public class Demo26 {public static void main(String[] args) {
// 26:开发一个标题为“FlipFlop”的游戏应用程序。它从1计数到100,遇到3的倍数就替换为单词“Flip”,
// 5的倍数就替换为单词“Flop”,既为3的倍数又为5的倍数则替换为单词“FlipFlop”。int i=1;for (i=1; i<=100;i++){if (i%3==0){System.out.println(i+"Flip");} else if (i%5==0) {System.out.println(i+"Flop");} else if (i%15==0) {System.out.println(i+"FlipFlop");}else {System.out.println(i+"捞的一");}}}
}
27:生成13位条形码
Ean-13码规则:第十三位数字是前十二位数字经过计算得到的校验码。
例如:690123456789
计算其校验码的过程为:
@前十二位的奇数位和6+0+2+4+6+8=26
@前十二位的偶数位和9+1+3+5+7+9=34
@将奇数和与偶数和的三倍相加26+34*3=128
@取结果的个位数:128的个位数为8
@用10减去这个个位数10-8=2
所以校验码为2
(注:如果取结果的个位数为0,那么校验码不是为10(10-0=10),而是0)
实现方法ean13()计算验证码,输入12位条码,返回带验证码的条码。
例:输入:692223361219输出:6922233612192
package practise;import java.util.Scanner;public class Demo27 {public static void main(String[] args) {/*27:生成13位条形码Ean-13码规则:第十三位数字是前十二位数字经过计算得到的校验码。例如:690123456789计算其校验码的过程为:@前十二位的奇数位和6+0+2+4+6+8=26@前十二位的偶数位和9+1+3+5+7+9=34@将奇数和与偶数和的三倍相加26+34*3=128@取结果的个位数:128的个位数为8@用10减去这个个位数10-8=2所以校验码为2
(注:如果取结果的个位数为0,那么校验码不是为10(10-0=10),而是0)实现方法ean13()计算验证码,输入12位条码,返回带验证码的条码。例:输入:692223361219输出:6922233612192*/Scanner scanner = new Scanner(System.in);System.out.println("请输入前十二位条码");String code = scanner.next();int c1=0,c2=0,sum,check;for(int i=0;i<12;i+=2){//奇数位数字求和c1+=(code.charAt(i)-'0');//数字字符-数字字符=整数//偶数位数字求和c2+=(code.charAt(i+1)-'0');}sum=c1+c2*3;check=(10-sum%10)%10;System.out.println(code+""+check);}
}
28:求两个整数的最大公约数和最小公倍数
package practise;import java.util.Scanner;public class Demo28 {public static void main(String[] args) {
// 28:求两个整数的最大公约数和最小公倍数int maxYue = 0;Scanner scanner = new Scanner(System.in);System.out.println("请输入两个整数");int a = scanner.nextInt();int b = scanner.nextInt();if (a < b) {for (int i = 1; i <= a; i++) {if (b % i == 0 && a % i == 0) {maxYue = i;}}} else {for (int i = 1; i <= b; i++) {if (b % i == 0 && a % i == 0) {maxYue = i;}}}System.out.println("最大公约数是:"+maxYue);int minBei=0;if (a < b) {for (int i = 1; i <= a*b; i++) {if (i % b == 0 && i % a == 0) {minBei = i;break;}}} else {for (int i = 1; i <= b; i++) {if (i % b == 0 && i % a == 0) {minBei = i;break;}}}System.out.println("最小公倍数是:"+minBei);}
}
29:将100元兑换为1元、5元、10元的零钱,请问有多少种兑换方法?
package practise;public class Demo29 {public static void main(String[] args) {
// 29:将100元兑换为1元、5元、10元的零钱,请问有多少种兑换方法?int x=1;int y = 5;int z = 10;int all=0;int j,k,l;for (j=0;j<=100;j++){x=1*j;for (k=0;k<=100;k++){y=5*k;for (l=0;l<=100;l++){z=10*l;all=x+y+z;while(all==100){System.out.println(j+","+k+","+l);break;}}}}}
}
30:用100元人民币兑换10元,5元,1元的纸币(每种都要有)共50张,计算有多少种兑换方案
package practise;public class Demo30 {public static void main(String[] args) {
// 30:用100元人民币兑换10元,5元,1元的纸币(每种都要有)共50张,
// 计算有多少种兑换方案int x=1;int y = 5;int z = 10;int all=0;int j,k,l,sum;for (j=0;j<=100;j++){x=1*j;for (k=0;k<=100;k++){y=5*k;for (l=0;l<=100;l++){z=10*l;all=x+y+z;sum = j+k+l;while(all==100&&sum==50){System.out.println(j+","+k+","+l);break;}}}}}
}
31:设计Java程序,假设有50瓶饮料,喝完3个空瓶可以换一瓶饮料,依次类推,请问总共喝了多少瓶饮料?
package practise;public class Demo31 {public static void main(String[] args) {
// 31:设计Java程序,假设有50瓶饮料,喝完3个空瓶可以换一瓶饮料,依次类推,请问总共喝了多少瓶饮料?int a = 50;//总int b = 50/3;//换的饮料个数(多余空瓶)int d = 50%3;//多的空瓶个数int c = 0;while ((b+d)>=3){c=c+b;b= (b+d)/3 ;d = b%3;}System.out.println(a+c);}
}