程序设计入门11 三个数之间排序(按a,b,c)输出版

题目描述

从键盘输入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输出的解法。

猜你喜欢

转载自blog.csdn.net/qq2285580599/article/details/80733425