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;
}
posted @ 2021-04-19 15:09  CodeSpark  阅读(266)  评论(0)    收藏  举报