多重循环结构流程制作练习
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 }