前言
本篇笔记主要进行复盘的内容是分支结构,通过学习分支结构从而更好巩固之前所学的内容。
目录
🍊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.相关表达式的使用