欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

将三个数字从小到大排列(或者从大到小排列)c及python

程序员文章站 2022-05-28 13:03:02
...

将三个数字从小到大排列(或者从大到小排列)c及python

很基础的算法题
输入三个整数x,y,z,请把这三个数由小到大输出。

c:

一般情况下,我们是用三个if来进行一个数字的变化,很简单的依次排序。
代码如下:

#include<stdio.h>
int main( )
{ 
int a , b , c ,t;
scanf(“%d , %d , %d” , &a , &b ,&c) ;
printf(“\n\n a=%d , b=%d , c=%d \n” ,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(“\n\n a=%d , b=%d , c=%d \n” ,a , b , c) ; 
}

2.我做一道题的时候,喜欢将这道算法的解法都尽量写出来,所以还有第二种思路。
第二种思路其实不难,我们在这里放三个数字,a b c。要是他不满足a<b<c的话我们就将他们的前两个或者后两个数字交换位置,
举个例子,比如2,3,1的话,很显然前面两个数字排序符合,那么我们交换后两个他就会变成2 1 3那么前面两个又不满足了,那我们在交换前面两个 1 2 3这样就成了,当然交换了两次会比前面复杂一点,但是只是三个整形,实际上,这些多余的复杂度对现在的电脑处理器来说,什么都不算。
代码如下:

#include<stdio.h>
#include<stdlib.h>
int main()
{
	int x,y,z,a;
	scanf("%d %d %d",&x,&y,&z);
	while(1) 
	{
	if(x>y)
	   {a=x;x=y;y=a;}
	if(y>z)
	   {a=y;y=z;z=a;}
	if(x<=y&&y<=z) 
	    break; 
	}
    printf("%d %d %d",x,y,z);
 }

python:

python相对c有很多其他的用法,用法很多,我就不一一详解,我们可以用尽量短的代码去完成这个算法,那么我们有何必去使用更长的呢?
这里我使用了字典以及列表的转化,排序函数,以及一次迭代
代码如下:

a['A'],a['B'],a['C']=map(int,input().split())
b_list=sorted(list(a.values()))
for i in range(3):    
    print(b_list[i]," ",end="")

大家注意在列表中sorted函数是有返回值的,他的返回值是一个排序好的列表,而sort函数的返回值却是none,所以这里的list(a.values())也可以在后面加上.sort()
这里的values函数是提出字典中的值,并返回一个名为dic_values列表,大家有兴趣可以去查一下,这里就不详解了