3.3 分支嵌套
例 3-7
肥胖问题(洛谷P5714)
BMI 指数是国际上常用的衡量人体胖瘦程度的一个标准,其算法是 m/h^2(40≤m≤120,1.4≤h≤2.0),其中 m 是指体重(千克),h 是指身高(米)。不同体型范围与判定结果如下:
- 小于 18.5:体重过轻,输出
Underweight;- 大于等于 18.5 且小于 24:正常体重,输出
Normal;- 大于等于 24:肥胖,不仅要输出 BMI 值(使用 cout 的默认精度),然后换行,还要输出
Overweight;
现在给出体重和身高数据,需要根据 BMI 指数判断体型状态并输出对应的判断。
对于非 C++ 语言,在输出时,请四舍五入保留六位有效数字输出,如果小数部分存在后缀 00,不要输出后缀 00。
请注意,保留六位有效数字不是保留六位小数。例如 114.5149114.5149 应该输出为 114.515114.515,9198.109198.10 应该输出为 9198.19198.1。
输入输出样例
| 输入 | 输出 |
|---|---|
70 1.72 |
Normal |
解答
#include<iostream>
using namespace std;
double m,h;
int main()
{
cin>>m>>h;
m=m/(h*h);
if(m<18.5)
cout<<"Underweight";
else if(m>=18.5 && m<24)
cout<<"Normal";
else
{
cout<<m<<endl;
cout<<"Overweight";
}
return 0;
}
例 3-8
三个数排序(洛谷P5715)
给出三个整数 a,b,c(0≤a,b,c≤100),要求把这三位整数从小到大排序。
输入输出样例
| 输入 | 输出 |
|---|---|
1 14 5 |
1 5 14 |
2 2 2 |
2 2 2 |
解答
解法一
直接比较
#include<iostream>
using namespace std;
int a,b,c;
int main()
{
cin>>a>>b>>c;
if(a>=b && a>=c)
{
if(b>c)
cout<<c<<" "<<b<<" "<<a;
else
cout<<b<<" "<<c<<" "<<a;
}
else if(b>=a && b>=c)
{
if(a>c)
cout<<c<<" "<<a<<" "<<b;
else
cout<<a<<" "<<c<<" "<<b;
}
else
{
if(a>b)
cout<<b<<" "<<a<<" "<<c;
else
cout<<a<<" "<<b<<" "<<c;
}
return 0;
}
解法二
选择排序
#include <iostream>
using namespace std;
int a,b,c;
int main(){
cin>>a>>b>>c;
if(a>b) swap(a,b); //swap就是交换两个数
if(a>c) swap(a,c);
if(b>c) swap(b,c);
cout<<a<<' '<<b<<' '<<c;
return 0;
}
解法三
直接询问,桶排序变形
#include <iostream>
using namespace std;
int a,b,c;
int main(){
cin>>a>>b>>c;
for(int i=0;i<=100;i++)
{
if(i == a)
cout<<a<<" ";
if(i == b)
cout<<b<<" ";
if(i == c)
cout<<c<<" ";
}
return 0;
}
解法四
sort 快速排序
#include <iostream>
#include <algorithm> //sort
using namespace std;
int s[3];
int main(){
cin>>s[0]>>s[1]>>s[2];
sort(s,s+3);//sort默认从小到大排
cout<<s[0]<<' '<<s[1]<<' '<<s[2];
return 0;
}
其他
理论上可以应用冒泡、归并、二分、堆排等各种算法,超出初级题目范围,暂且不表。
例 3-9
月份天数(洛谷P5716)
输入年份和月份,输出这一年的这一月有多少天。需要考虑闰年。
输入输出样例
| 输入 | 输出 |
|---|---|
1926 8 |
31 |
2000 2 |
29 |
解答
#include<iostream>
using namespace std;
int month[12]{31,28,31,30,31,30,31,31,30,31,30,31}; //定义平年每月天数数组
int y,m;
int main()
{
cin>>y>>m;
if(y%4==0 && (y%100!=0 || y%400==0)) //如果是闰年,更新2月天数
month[1]=29;
cout<<month[m-1];
return 0;
}
博主的个人网站:https://codespark.cn/

浙公网安备 33010602011771号