【蓝桥杯日记】复盘篇二:分支结构

前言

本篇笔记主要进行复盘的内容是分支结构,通过学习分支结构从而更好巩固之前所学的内容。

目录

前言

目录

🍊1.数的性质

分析:

知识点:

🍅2.闰年判断

说明/提示

分析:

知识点:

🍑3.肥胖问题

说明/提示

分析:

知识点:

🌰4.三位数排序

分析:

知识点:

🍓5.买铅笔

分析:

知识点:

总结


🍊1.数的性质

题目描述

一些整数可能拥有以下的性质:

  • 性质 1:是偶数;
  • 性质 2:大于 4 且不大于 12。

小 A 喜欢这两个性质同时成立的整数;Uim 喜欢这至少符合其中一种性质的整数;八尾勇喜欢刚好有符合其中一个性质的整数;正妹喜欢不符合这两个性质的整数。现在给出一个整数 x,请问他们是否喜欢这个整数?

输入格式

输入一个整数x (0≤x≤1000)

输出格式

输出这4个人是否喜欢这个数字,如果喜欢则输出 1,否则输出 0,用空格分隔。输出顺序为:小 A、Uim、八尾勇、正妹。

输入输出样例

输入 #1

复制代码
12

输出 #1

复制代码
1 1 0 0
分析:

通过非嵌套if来对每一种条件判断,可以把是否正确的数值存储在数组里边或者直接输出。

知识点:

题目的主要知识点是if条件的判断和正确使用大小于符号,&&和||组合使用的情况。

代码如下:

java 复制代码
import java.util.Scanner;

public class Main {
    static int arr[] = new int[4];

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int x = sc.nextInt();
        if (x % 2 == 0 && (x > 4 && x <= 12)) {
            arr[0]++;
        }
        if (x % 2 == 0 || (x > 4 && x <= 12)) {
            arr[1]++;
        }
        if ((x % 2 == 0) && !(x > 4 && x <= 12) || (!(x % 2 == 0) && (x > 4 && x <= 12))) {
            arr[2]++;

        }
        if (!(x % 2 == 0) && !(x > 4 && x <= 12)) {
            arr[3]++;
        }
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }
}

🍅2.闰年判断

题目描述

输入一个年份,判断这一年是否是闰年,如果是输出 1,否则输出 0。

输入格式

输入一个正整数 n,表示年份。

输出格式

输出一行。如果输入的年份是闰年则输出 1,否则输出 0。

输入输出样例

输入 #1

复制代码
1926

输出 #1

复制代码
0

输入 #2

复制代码
1900

输出 #2

复制代码
0

输入 #3

复制代码
2000

输出 #3

复制代码
1

输入 #4

复制代码
1996

输出 #4

复制代码
1

说明/提示

数据保证,1582≤n≤2020 且年份为自然数。

输入一个年份,判断这一年是否是闰年,如果是输出 1,否则输出 0。

输入格式

输入一个正整数 n,表示年份。

分析:

通过if条件判断语句进行判断

知识点:

闰年:能被4整除且能被100整除,或则能被400整除的才是闰年。

代码如下:

java 复制代码
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int x=sc.nextInt();
        if((x%4==0&&x%100!=0)||x%400==0)
            System.out.println(1);
        else
            System.out.println(0);
    }
}

🍑3.肥胖问题

题目描述

BMI 指数是国际上常用的衡量人体胖瘦程度的一个标准,其算法是 m/(n*n),其中 m 是指体重(千克),h 是指身高(米)。不同体型范围与判定结果如下:

  • 小于 18.518.5:体重过轻,输出 Underweight
  • 大于等于 18.5 且小于 24:正常体重,输出 Normal
  • 大于等于 24:肥胖,不仅要输出 BMI 值(使用 cout 的默认精度),然后换行,还要输出 Overweight

现在给出体重和身高数据,需要根据 BMI 指数判断体型状态并输出对应的判断。

对于非 C++ 语言,在输出时,请四舍五入保留六位有效数字输出,如果小数部分存在后缀 0,不要输出后缀 0。

请注意,保留六位有效数字不是保留六位小数。例如 123.4567 应该输出为 123.457,5432.10 应该输出为 5432.15432.1。

输入格式

共一行。

第一行,共 2个浮点数m,h,分别表示体重(单位为 kg),身高(单位为 m)。

输出格式

输出一行一个字符串,表示根据 BMI 的对应判断。特别地,对于 Overweight 情况的特别处理请参照题目所述。

输入输出样例

输入 #1

复制代码
70 1.72

输出 #1

复制代码
Normal

输入 #2

复制代码
100 1.68

输出 #2

复制代码
35.4308
Overweight

说明/提示

对于所有数据,40≤m≤120,1.4≤h≤2.0。m 和 h 的小数点后不超过三位。

分析:

通过if来进行对体重进行判断,进行合理的输出。

知识点:

保留小数位数,可以使用printf进行对字符串的格式化输出。

printf里边的格式说明:

格式说明符:

  • %d - 十进制整数
  • %f - 浮点数
  • %s - 字符串
  • %c - 字符
  • %b - 布尔值
  • %n - 平台特定的换行符
  • %% - 百分号字符

额外的修饰符:

      • 强制在数值前面显示正号或负号
      • 左对齐
  • 0 - 数字前面补0
  • 空格 - 显示正数时在前面显示空格
  • . - 指定小数点后的精度
  • m.n - m指定整个字段的最小宽度,n指定小数点后的位数

代码如下:

java 复制代码
import javax.script.ScriptContext;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        double m,h,weight;
        m=sc.nextDouble();
        h=sc.nextDouble();
        weight=m/Math.pow(h,2);
        if(weight<18.5){
            System.out.println("Underweight");
        } else if (weight>=18.5&&weight<24) {
            System.out.println("Normal");
        }else {
//            需要保留小数位数,输出不固定的小数位数
            System.out.printf("%.4f",weight);
            System.out.println();
            System.out.print("Overweight");
        }
    }
}

🌰4.三位数排序

题目描述

给出三个整数 a,b,c(0≤a,b,c≤100),要求把这三位整数从小到大排序。

输入格式

输入三个整数 a,b,c,以空格隔开。

输出格式

输出一行,三个整数,表示从小到大排序后的结果。

输入输出样例

输入 #1

复制代码
1 14 5

输出 #1

复制代码
1 5 14

输入 #2

复制代码
2 2 2

输出 #2

复制代码
2 2 2
分析:

以上内容是对三位数字的排序问题,可以使用if来进行判断。也可以使用排序算法来进行排序,下列我们是使用系统自带的排序函数:Arrays类中的sort()来实现的,sort()采用的是桶排序。后序会对排序进行重点回顾。

知识点:

Arrays类中的sort()可以实现对数组的升序排序。

代码如下:

java 复制代码
import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int arr[]=new int[3];
        for (int i = 0; i < arr.length; i++) {
            arr[i]= sc.nextInt();
        }
        Arrays.sort(arr);
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
    }
}

🍓5.买铅笔

题目描述

P 老师需要去商店买 n 支铅笔作为小朋友们参加 NOIP 的礼物。她发现商店一共有 3种包装的铅笔,不同包装内的铅笔数量有可能不同,价格也有可能不同。为了公平起 见,P 老师决定只买同一种包装的铅笔。

商店不允许将铅笔的包装拆开,因此 P 老师可能需要购买超过 n 支铅笔才够给小朋友们发礼物。

现在 P 老师想知道,在商店每种包装的数量都足够的情况下,要买够至少 n 支铅笔最少需要花费多少钱。

输入格式

第一行包含一个正整数 n,表示需要的铅笔数量。

接下来三行,每行用 2 个正整数描述一种包装的铅笔:其中第 1 个整数表示这种包装内铅笔的数量,第 2 个整数表示这种包装的价格。

保证所有的 7 个数都是不超过 10000 的正整数。

输出格式

1 个整数,表示 P 老师最少需要花费的钱。

输入输出样例

输入 #1复制

复制代码
57
2 2
50 30
30 27

输出 #1

复制代码
54

输入 #2

复制代码
9998
128 233
128 2333
128 666

输出 #2

复制代码
18407

输入 #3

复制代码
9999
101 1111
1 9999
1111 9999

输出 #3

复制代码
89991

说明/提示

铅笔的三种包装分别是:

  • 22 支装,价格为 22;
  • 5050 支装,价格为 3030;
  • 3030 支装,价格为 2727。

P 老师需要购买至少 5757 支铅笔。

如果她选择购买第一种包装,那么她需要购买 29份,共计 2×29=58 支,需要花费的钱为 2×29=58。

实际上,P 老师会选择购买第三种包装,这样需要买 22 份。虽然最后买到的铅笔数量更多了,为 30×2=60 支,但花费却减少为 27×2=54,比第一种少。

对于第二种包装,虽然每支铅笔的价格是最低的,但要够发必须买 2 份,实际的花费达到了 30×2=60,因此 P 老师也不会选择。

所以最后输出的答案是 54。

数据范围

保证所有的 7 个数都是不超过 10000 的正整数。

分析:

采用二维数组来对三组数据进行保存,设置初始值result设置为Integer类中的最大值,当每次的money小于result,则result就等于当前的money。判断n只铅笔能不能被每套铅笔进行整除,能整除则说明可以买到正好的铅笔个数,如果不能整除则说明必须多买一套铅笔,才能保证够分。

知识点:

Integer类的最大值Integer.MAX_VALUE 和Integer类的最小值为Integer.MIN_VALUE

代码如下:

java 复制代码
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int n,result=Integer.MAX_VALUE;
        n=sc.nextInt();
        int arr[][]=new int[3][2];
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 2; j++) {
                arr[i][j]=sc.nextInt();
            }
        }
        for (int i = 0; i < 3; i++) {
            int money=0;
            int x=n/arr[i][0];
            money=arr[i][1]*x;
            if(n%arr[i][0]!=0)
                money+=arr[i][1];
            if(money<result)
                result=money;
        }
        System.out.println(result);

    }
}

总结

本次复盘篇需要掌握如下内容:

1.if条件语句的使用。

2.Arrays类sort()函数的使用

3.如何保留小数位数

4.相关表达式的使用

相关推荐
Lzh编程小栈4 小时前
【嵌入式底层】SPI超透彻详解:通信原理、四线结构、四种模式、寄存器底层 + 面试全集
c语言·stm32·单片机·面试·职场和发展
Dr.kangder5 小时前
嵌入式面试总结(十八)——JTAG调试
嵌入式硬件·面试·职场和发展·架构·嵌入式
Dr.kangder8 小时前
嵌入式面试总结(十六)——AMBA总线
面试·职场和发展·架构·嵌入式·虚拟化·总线
Dr.kangder8 小时前
嵌入式面试总结(十九)——内存泄露
单片机·算法·面试·职场和发展·架构·硬件架构
Dr.kangder9 小时前
嵌入式面试总结(十七)——DMA总线
面试·职场和发展·架构·嵌入式·总线
城管不管1 天前
重生——第九次面试2026.8.13某车一面
分布式·ai·面试·职场和发展·rabbitmq
琥珀色糖1 天前
leetcode hot100题(持续更新)移动零(双指针)
算法·leetcode·职场和发展·双指针·移动零
Dr.kangder1 天前
嵌入式面试总结(十四)——中断处理
单片机·面试·职场和发展·架构·硬件架构·嵌入式
Dr.kangder1 天前
嵌入式面试总结(十)——流水线
单片机·嵌入式硬件·面试·职场和发展·系统架构·嵌入式
淡海水1 天前
C#与常用数据结构源码剖析-全篇导览
开发语言·数据结构·unity·面试·职场和发展·c#