题目:输入3个整数,从小到大排序后输出。
样例输入:
20 7 33
样例输出:
7 20 33
法一(我的方法):
#include<stdio.h>
int main()
{
int a,b,c,t;
scanf("%d%d%d",&a,&b,&c);
if(a>=b)
{
if(b>=c)
{
}
else
{
t = b;
b = c;
c = t;
if(a<=b)
{
t = a;
a = b;
b = t;
}
}
}
else
{
t = a;
a = b;
b = t;
if(b>=c)
{
}
else
{
t = b;
b = c;
c = t;
if(a<=b)
{
t = a;
a = b;
b = t;
}
}
}
printf("%d %d %d",c,b,a);
return 0;
}
思想:a和b,b和c,新生成的b再和a,不科学不符合逻辑,主要是排序过程混乱,无通用性。
法二:我的方法
#include<stdio.h>
int main()
{
int a,b,c,t;
scanf("%d%d%d",&a,&b,&c);
if(a>=b&&b>=c)
{
}
else if(a>=c&&c>=b)
{
t = b;
b = c;
c = t;
}
else if(b>=a&&a>=c)
{
t = a;
a = b;
b = t;
}
else if(b>=c&&c>=a)
{
}
}
官方方法:
#include<stdio.h>
int main()
{
int a,b,c,t;
scanf("%d%d%d",&a,&b,&c);
if(a>=b&&b>=c)printf("%d %d %d",a,b,c);
else if(a>=c&&c>=b)printf("%d %d %d",a,c,b);
else if(b>=a&&a>=c)printf("%d %d %d",b,a,c);
else if(b>=c&&c>=a)printf("%d %d %d",b,c,a);
else if(c>=a&&a>=b)printf("%d %d %d",c,a,b);
else printf("%d %d %d",c,b,a);
}
思想:我想着共有 a,b,c a,c,b b,a,c b,c,a c,a,b c,b,a 六种情况,便根据这六种情况调整就是了。。。但不用非得让a,b,c按顺序有小到大,这样很麻烦。。。官方方法是直接调整输出顺序就行了,a,b,c的值不要动。
法三:
#include<stdio.h>
int main()
{
int a,b,c,t;
scanf("%d%d%d",&a,&b,&c);
if(a>b)
{
t = a;
a = b;
b = t;
}
if(a>c)
{
t = a;
a = c;
c = t;
}
if(b>c)
{
t = b;
b = c;
c = t;
}
printf("%d %d %d",a,b,c);
return 0;
}
思想:这种方法可以视为微型的冒泡排序,先把最小的定在a,然后依次定下。这种方法就要动a,b,c的值了。