二白整理了一些关于循环结构的习题,本人也逐个完成,有需要的同学自取,答案仅供参考。
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—A
char 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=99
int 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/99
double 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);
}
}