首页 > 技术文章 > 多重循环结构流程制作练习

cheng1994 2019-01-02 20:41 原文

1.一个人很倒霉,不小心打碎了一位妇女的一篮子鸡蛋。为了赔偿便询问篮子里有多少鸡蛋。那妇女说,她也不清楚,

只记得每次拿两个则剩一个,每次拿3个则剩2个,每次拿5个则剩4个,若每个鸡蛋1元,

请你帮忙编程,计算最少应赔多少钱? 要求:用循环语句实现,直接打印出结果不给分。

 1 /**
 2  * 练习一:一个人很倒霉,不小心打碎了一位妇女的一篮子鸡蛋。为了赔偿便询问篮子里有多少鸡蛋。那妇女说,
 3  * 她也不清楚,只记得每次拿两个则剩一个,每次拿3个则剩2个,每次拿5个则剩4个,若每个鸡蛋1元,请你帮忙编程,计算最少应赔多少钱? 
 4  * 要求:用循环语句实现,直接打印出结果不给分。
 5  * @author lenovo
 6  *
 7  */
 8 public class JiSuanJiDan {
 9     public static void main(String[] args) {
10         int money;    
11         for(money=1;money>=1;money++){    //从1开始累加1,无线循环,把每个数都套进去,第一个符合条件的就为最小符合条件的值,即为最少赔得钱。
12             if((money%2==1 && money%3==2) && money%5==4) {
13                 // 当money同时满足三个条件时
14                     break;  // 输出break,结束循环,并且得到最后money被赋予的值
15             }
16         }
17         System.out.println("最少赔"+money);   //最后输出money的值
18     }
19 
20 }

2.从键盘接收一个整数N,统计出1~N之间能被7整除的整数的个数,以及这些能被7整除的数的和。

/**
 * 从键盘接收一个整数N,统计出1~N之间能被7整除的整数的个数,以及这些能被7整除的数的和
 * @author lenovo
 *
 */
import java.util.*;
public class Chu7 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("请输入一个大于1的整数");
        int n = input.nextInt();
        int sum=0;
        int b = n / 7;    //先计算能被7整除的个数
        System.out.println("能被整除的个数为"+b+"个");
        System.out.print("这几个数为");
        for(int a=1;a<=n;a++) {    //从1开始依次递增循环到n
            if(a%7 != 0) {        //诺n除7 商不为0,则次数不被整除,就执行continue,开始下一次循环 直到遇到被7整除的数。
                continue;
            }
            sum += a ; 
            System.out.print(a+", ");
        }
        System.out.print("数的和为"+sum);
    
    }

}

【程序2】

判断101-200之间有多少个素数,并输出所有素数。

程序分析:

    * 素数是:只能被1或本身整除的数,如:2,3,5,7,11,131...

package com.xunhuan;
/**
 * 判断101-200之间有多少个素数,并输出所有素数。
程序分析:
    * 素数是:只能被1或本身整除的数,如:2,3,5,7,11,131... 

 * @author lenovo
 *
 */
public class ChengXu2 {
    public static void main(String[] args) {
        int b =0;
        for(int i=101; i<=200; i++) {
            boolean a = true;
            for(int j=2; j<i; j++) {
                if(i%j==0) {
                    a = false;        //如果i%j==0的话 那么这个i就不是素数,那么就从新给a赋值false,是后面a为false无法输出这个时候的i
                    break;
                }
            
            }
            
            if(a) {    // a为true则输出i , 为false则不输出
                System.out.println(i);
                b++;
            }
            
        }
        System.out.println("一共有"+b+"个素数");
    }
}

 

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

程序分析:兔子的规律为数列1,1,2,3,5,8,13,21....

package com.xunhuan;
/**
 * 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,
 * 小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,第n个月的兔子对数为多少?
 * @author lenovo
 *
 */
import java.util.Scanner;

public class TuZi {
    public static void main(String[] args) {
        Scanner cxj = new Scanner(System.in);
        System.out.println("请输入您要查看的月份:");
        int yue = cxj.nextInt();
        int num1 = 1;
        int num2 = 1;
        int sum = 1;
        for(int i=3;i<=yue;i++) {
            sum = num1 + num2;
            num1 = num2;
            num2 = sum;
        }
        System.out.println("该月兔子有"+sum+"对");
    }
}

 

一个笼子有35个头,94只脚,问鸡和兔各有多少?

解题:数学方法:设鸡i只,兔j只,方程:i + j = 35 ;  

2 * i + 4 * j = 94。

解题思路:鸡和兔加起来35只,所以算每一种可能的脚的个数,符合就输出就可以了

 1 package com.xunhuan;
 2 /**
 3  *一个笼子有35个头,94只脚,问鸡和兔各有多少?
 4  *解题:数学方法:设鸡i只,兔j只,方程:i + j = 35 ;  2 * i + 4 * j = 94。
 5  *解题思路:鸡和兔加起来35只,所以算每一种可能的脚的个数,符合就输出就可以了
 6  * @author lenovo
 7  *
 8  */
 9 public class JiHeTu {
10     public static void main(String[] args) {
11         
12         for(int i=1;i<35;i++) {
13             int j=35-i;
14             if(2*i+4*j==94) {
15                 System.out.println("鸡有"+i+"只");
16                 System.out.println("兔有"+j+"只");
17 
18             }
19         
20         }
21     }
22 
23 }

马克思手稿中有一道趣味数学题:有30个人,其中有男人、女人和小孩,

在一家饭馆里吃饭共花了50先令,每个男人各花3先令,每个女人各花2先令,每个小孩各花1先令,问男人、女人和小孩各有几人?

 1 package com.xunhuan;
 2 /**
 3  * 马克思手稿中有一道趣味数学题:有30个人,其中有男人、女人和小孩,
 4  * 在一家饭馆里吃饭共花了50先令,每个男人各花3先令,
 5  * 每个女人各花2先令,每个小孩各花1先令,问男人、女人和小孩各有几人? 
 6  * @author lenovo
 7  *
 8  */
 9 public class NanHeNvHeXiaoHai {
10     public static void main(String[] args) {
11         for(int i=1; i<=28; i++) {
12             int a;            //男人i个 女人a个, 小孩b个。
13             int b;
14             for(a=30-i;a>0; a--) {
15                 b=30-i-a;
16                 if(i*3+a*2+b*1==50) {
17                     System.out.print("男人有"+i+"个\t");
18                     System.out.print("女人有"+a+"个\t");
19                     System.out.println("小孩有"+b+"个");
20                     System.out.println("************************************");
21 
22                 }
23             }
24         }
25     }
26 
27 }

【程序3】

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

程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。

 1 package com.xunhuan;
 2 /**
 3  *
 4 【程序3】
 5 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。
 6 例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。
 7 程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
 8 
 9  * @author lenovo
10  *
11  */
12 public class ChengXu3 {
13     public static void main(String[] args) {
14         for(int i = 100; i<=999; i++) {
15             int a = i%10;    //取个位数
16             int b = i/10 %10;    //取十位数
17             int c = i/100 %10;    //取百位数
18             if(a*a*a+b*b*b+c*c*c==i) {
19                 System.out.println(i);
20             }
21         }
22     }
23 }

 【程序4】

 1 package com.xunhuan;
 2 
 3 import java.util.Scanner;
 4 
 5 /**
 6  * 【程序4】 
 7 将一个正整数分解质因数。比如:输入90,打印出90=2*3*3*5。
 8  程序分析:对n进行分解质因数,应先找到一个最小的质数k。然后按下述步骤完毕:   
 9 (1)假设这个质数恰等于n,则说明分解质因数的过程已经结束。打印出就可以。   
10 (2)假设n <> k,但n能被k整除。则应打印出k的值,并用n除以k的商,作为新的正整数你n,反复运行第一步。   
11 (3)假设n不能被k整除。则用k+1作为k的值,反复运行第一步。
12  * 
13  * @author lenovo
14  *
15  */
16 public class ChengXu4 {
17     public static void main(String[] args) {
18         Scanner into = new Scanner(System.in);
19         System.out.println("请输入一个正整数");
20         int i = into.nextInt();
21         System.out.print(i+"的质因数是:"+i+"=");
22         for(int n=2;n<=i;n++) {
23             
24                 if(i%n==0) {
25                     System.out.print(n+"*");
26                     i = i/n;
27                     n--;
28                 
29                 }
30                 
31             }
32         System.out.println(i);
33     }
34 
35 }

【程序5】   
题目:利用条件运算符的嵌套来完毕此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分下面的用C表示。

 1 package com.xunhuan;
 2 
 3 import java.util.Scanner;
 4 
 5 /**
 6  * 【程序5】   
 7 题目:利用条件运算符的嵌套来完毕此题:学习成绩> =90分的同学用A表示,60-89分之间的用B表示,60分下面的用C表示。
 8 
 9  * @author lenovo
10  *
11  */
12 public class Chengxu5 {
13     public static void main(String[] args) {
14         Scanner input = new Scanner(System.in);
15         System.out.println("请输入学生的成绩");
16         int sum = input.nextInt();
17         if(sum>=90) {
18             System.out.println("成绩为A");
19         }else if(sum>=60){
20             System.out.println("成绩为B");
21         }else {
22             System.out.println("成绩为C");
23         }
24                 
25     }
26 
27 }

【程序6】   
题目:输入两个正整数m和n,求其最大公约数和最小公倍数。   
/**在循环中,仅仅要除数不等于0。用较大数除以较小的数。将小的一个数作为下一轮循环的大数。

取得的余数作为下一轮循环的较小的数。如此循环直到较小的数的值为0,返回较大的数,此数即为最大公约数,最小公倍数为两数之积除以最大公约数。* /

 1 package com.xunhuan;
 2 
 3 import java.util.Scanner;
 4 
 5 /**
 6  * 【程序6】   
 7 题目:输入两个正整数m和n,求其最大公约数和最小公倍数。   
 8 /**在循环中,仅仅要除数不等于0。用较大数除以较小的数。将小的一个数作为下一轮循环的大数。
 9 取得的余数作为下一轮循环的较小的数。如此循环直到较小的数的值为0,返回较大的数,此数即为最大公约数,最小公倍数为两数之积除以最大公约数。
10  * @author lenovo
11  *
12  */
13 public class Chengxu6 {
14     public static void main(String[] args) {
15         Scanner input = new Scanner(System.in);
16         System.out.println("请输入数字m");
17         int m = input.nextInt();
18         System.out.println("请输入数字n");
19         int n = input.nextInt();
20         
21         if(m>n) {
22             while(true) {
23                 int i=m%n;
24                 if(n%i==0) {
25                     System.out.println("最大公约数是"+i);
26                     int sum = m*n/i;
27                     System.out.println("最小公倍数是"+sum);        
28                     break;
29                 }
30                 m = n;
31                 n = i;
32             }
33             
34         }else {
35             while(true) {
36                 int i=n%m;
37                 if(m%i==0) {
38                     System.out.println("最大公约数是"+i);
39                     int sum = m*n/i;
40                     System.out.println("最小公倍数是"+sum);
41                     break;
42                 }
43                 n = m;
44                 m = i;
45             }    
46         }
47         
48     }
49 }

 

推荐阅读