题目描述
从键盘输入3个实数a, b, c,通过比较交换,将最小值存储在变量a中,最大值存储在变量c中,中间值存储在变量b中,并按照从小到大的顺序输出这三个数a, b, c。
末尾输出换行。
输入
输入以空格分隔的三个实数
输出
按照从小到大的顺序输出这三个实数,中间以空格分隔,最小值在前,最大值在后。小数点后保留2位小数。
注意末尾的换行。
样例输入
3 7 1
样例输出
1.00 3.00 7.00
一,错误解法:
#include <iostream>
#include<math.h>
using namespace std;
int main()
{
double a,b,c,t;
scanf("%lf%lf%lf",&a,&b,&c);
if(a>b&&a>c&&b>c)
{
// cba
t=a;
a=c;
c=t;
}
if(a>b&&a>c&&b<c)
{
// bca
t=a;
a=c;
c=t;
t=a;
a=b;
b=t;
}
if(b>a&&b>c&&c>a)
{
// acb
t=b;
b=c;
c=t;
}
if(b>a&&b>c&&c<a)
{
// cab
t=c;
c=a;
a=t;
t=c;
c=b;
b=t;
}
if(b>a&&c>a&&b>c)
{
// cba
t=a;
a=c;
c=t;
}
if(b>a&&c>a&&b<c)
{
// bca
t=c;
c=b;
b=t;
t=c;
c=a;
a=t;
}
printf("%.2f %.2f %.2f",a,b,c);
return 0;
}
二,正确解法:
#include<stdio.h>
int main()
{
double a,b,c,temp;
scanf("%lf%lf%lf",&a,&b,&c);
if(a>b){temp=b;b=a;a=temp;}
if(a>c){temp=c;c=a;a=temp;}
if(b>c){temp=c;c=b;b=temp;}
printf("%.2f %.2f %.2f\n",a,b,c);
return 0;
}
三,感悟
先确定最小的放在前头,然后再找第二小的。一个一个比,不要一下比多个,一下比多个适合printf里不按a,b,c输出的解法。