03 流程控制(循环)

目录

一.顺序结构

二.选择结构

2.1 if

2.2 switch

三.循环结构

3.1 while循环

3.2 do .. while

3.3 for 

四.使用循环解决的算法

4.1 暴力(枚举)法

4.2 顺推

4.3 逆推 

五.练习 

1、完成1+2+3+.....+100

2、做一个猜11以内的整数的游戏,直到猜对为止

3、判断一个数是否为素数

4、连续输入多个数,如果为0,退出;如果是负数,忽略;并分别计算奇偶数的个数

5、水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。

6、鸡兔一共有50只,脚一共有160只,问鸡和兔各多少只?

7、有1020个西瓜,第一天卖掉总数的一半后又多卖出两个,以后每天卖剩下的一半多两个,问几天以后能卖完

8、神兔:有一对兔子,三个月成长期后,每一个月会下一对小兔子,小兔子的成长期也是三个月,每个月都会下一对小兔子,经此类推。问12个月后,一共有多少对兔子?9、猴子吃桃问题: 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃了一半,又多吃一个,以后每天都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子。求第一天共摘了多少个?10、百钱买百鸡,有100元钱,要去买100只鸡,公鸡5元一只,母鸡3元一只,小鸡1元3只,问公,母,小鸡各买多少只


一.顺序结构

计算机默认的执行结构

二.选择结构

2.1 if

1.单分支 

if(){

}

2.双分支

  if(){

}else{

}

3.多分支

语法: if(条件表达式){

    代码块1 }else if(条件表达式){

    代码块2 }else{     代码块3 }

 4.嵌套

:if或else里嵌套if .. else

2.2 switch

 注意:

1.switch 语句如果没有遇到 break ,会一直执行下去

2.switch 只能做等值比较;而且只能使用 byte,short,int,char 类型(1.7后可以使用 String )

3.switch 中使用的是穿透执行的原则;即满足一个 case 后,如没有 break ;则会穿透执行下面的代码;而忽略 case 及 default 的判断;

4.与if相比,switch 的 结构更加清晰,但只能做等值比较,而且数据类型有限制,因此没有 if 应用广泛;

三.循环结构

3.1 while循环

[初始化语句]

 while(条件表达式)

{    代码块  }

3.2 do .. while

[初始化语句]

do {         代码块  }

while(条件表达式); 

至少执行一次循环体

3.3 for 

for(初始语句;循环体条件表达式;循环体后语句){    代码块 }

初始语句:只运行一次,开始循环判断之前执行,通常用来初使化变量;

循环体条件表达式:布尔表达式,用来判断是否进入循环体;

循环体后语句:循环体结束后执行的代码;

以上三个表达式都可以省略,如省略,则为死循环      

 特点:非常适合已知次数的循环;

break: 结束循环

continue: 跳过当前循环

嵌套循环 

四.使用循环解决的算法

4.1 暴力(枚举)法

就是穷举法

将问题的所有可能的答案一一列举,然后根据条件判断此答案是否合适,合适就保留,不合适就丢弃。 

例如:找出1到100之间的素数,需要将1到100之间的所有整数进行判断。

特点

1、得到的结果肯定是正确的;

2、可能做了很多的无用功,浪费了宝贵的时间,效率低下。

3、通常会涉及到求极值(如最大,最小等)。

4、数据量大的话,可能会造成时间崩溃。

4.2 顺推

从已知条件出发,逐步推算出要解决问题的方法

例如: 1.卖西瓜     有1020个西瓜,第一天卖掉总数的一半后又多卖出两个,以后每天卖剩下的一半多两个,问几天以后能卖完

2.斐波拉契数列

4.3 逆推 

从已知结果,用迭代表达式逐步推算出问题的开始条件

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

五.练习 

1、完成1+2+3+.....+100

package base;

public class Test02 {
    public static void main(String[] args) {
        //完成1+2+3+.....+100
        int sum = 0;
        for (int i = 1; i <= 100 ; i++){
            sum += i;
        }
        System.out.println("结果为: "+ sum);
    }
}


2、做一个猜11以内的整数的游戏,直到猜对为止

package base;
import java.util.Random;
import java.util.Scanner;
public class Test02 {
    public static void main(String[] args) {
        //做一个猜10以内的整数的游戏,直到猜对为止
        Scanner scanner = new Scanner(System.in);
        int r = (int) (Math.random() * 10 + 1 );
        System.out.println(r);
        while(true){
            System.out.println("请输入数字: ");
            int finger = scanner.nextInt();
            if (finger == r){
                System.out.println("恭喜你猜对了");
                break;
            }else{
                System.out.println("猜错了呀,继续猜!");
            }

        }
    }
}


3、判断一个数是否为素数

package base;
import java.util.Random;
import java.util.Scanner;
public class Test02 {
    public static void main(String[] args) {
        //判断一个数是否为素数
        Scanner scanner = new Scanner(System.in);
        int finger = scanner.nextInt();
        boolean flag = true;
        for (int i = 2; i < Math.sqrt(finger); i++) {
                if (finger % i == 0){
                    flag = false;
                    System.out.println(finger+"不是素数");
                    break;
                }
            }
        System.out.println(finger+"是素数");

        }


}


4、连续输入多个数,如果为0,退出;如果是负数,忽略;并分别计算奇偶数的个数

package base;
import java.util.Random;
import java.util.Scanner;
public class Test02 {
    public static void main(String[] args) {
        //连续输入多个数,如果为0,退出;如果是负数,忽略;并分别计算奇偶数的个数
        Scanner scanner = new Scanner(System.in);
        int jishu=0,oushu=0;
        while(true){
            int finger = scanner.nextInt();
            if (finger == 0){
                break;
            }else{
                if (finger < 0){
                    System.out.println("请输入正数");
                }else if (finger % 2 == 0){
                    oushu++;
                }else{
                    jishu++;
                }
            }
        }
       System.out.println("奇数个数: "+jishu);
        System.out.println("偶数个数: "+oushu);

        }


}




5、水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。

package base;
import java.util.Random;
import java.util.Scanner;
public class Test02 {
    public static void main(String[] args) {
        //水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个三位整数: ");
        int finger = scanner.nextInt();
        int a = finger % 10; //个位数
        int b = finger / 10 % 10; //十位数
        int c = finger / 100; //百位数
        if (Math.pow(a,3) + Math.pow(b,3) + Math.pow(c,3) == finger){
            System.out.println(finger+"是水仙花数");
        }else{
            System.out.println(finger+"不是水仙花数");
        }

        }


}


6、鸡兔一共有50只,脚一共有160只,问鸡和兔各多少只?

package base;
import java.util.Random;
import java.util.Scanner;
public class Test02 {
    public static void main(String[] args) {
        //鸡兔一共有50只,脚一共有160只,问鸡和兔各多少只?

       for (int i = 1;i <= 50;i++){
          int j = 50 - i;
               if (i * 2 + j * 4 == 160){
                   System.out.println("鸡兔个数分别为: "+ i+","+ j);
                   break;
           }
       }


        }


}


7、有1020个西瓜,第一天卖掉总数的一半后又多卖出两个,以后每天卖剩下的一半多两个,问几天以后能卖完

package base;
import java.util.Random;
import java.util.Scanner;
public class Test02 {
    public static void main(String[] args) {
        //有1020个西瓜,第一天卖掉总数的一半后又多卖出两个,以后每天卖剩下的一半多两个,问几天以后能卖完
        int day=0;
        int sellSum,restSum = 1020;
        while(restSum > 0){
            sellSum = restSum / 2 + 2;
            restSum = restSum - sellSum;
            day++;
        }
        System.out.println(day+"天卖完");
        }


}


8、神兔:有一对兔子,三个月成长期后,每一个月会下一对小兔子,小兔子的成长期也是三个月,每个月都会下一对小兔子,经此类推。问12个月后,一共有多少对兔子?
9、猴子吃桃问题: 猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个,第二天早上又将剩下的桃子吃了一半,又多吃一个,以后每天都吃了前一天剩下的一半零一个。到第10天早上想再吃时,见只剩下一个桃子。求第一天共摘了多少个?
10、百钱买百鸡,有100元钱,要去买100只鸡,公鸡5元一只,母鸡3元一只,小鸡1元3只,问公,母,小鸡各买多少只

package base;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class Test02 {
    public static void main(String[] args) {
    //10、百钱买百鸡,有100元钱,要去买100只鸡,公鸡5元一只,母鸡3元一只,小鸡1元3只
        // 问公,母,小鸡各买多少只
       //公鸡最多20只,母鸡最多33只
        for (int i = 0; i < 20;i++){
            for (int j = 0;j<33;j++){
                for(int k = 0;k<100;k++){
                    if ((i + j + k==100)&& (5*i + 3*j + k/3==100)&&(k%3==0)){
                        System.out.print(" 分别为 "+i+" "+j+" "+k+" ");
                    }
                }
            }
        }

    }
}

这个可以改进,小鸡个数可以用100-i-j 代替 

以上代码都是我自己写的,没答案,如有错误,麻烦指正

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值