本专题专门设置新手题目 难度通常为简单或者中等

今天,我们来讨论的这个题目,很简单,说实话,要做出来应该对于大部分人来说肯定是没问题的,但是所谓一题多解,这里我们会给出两种解法,两种解法都不难,但是从过程中,希望大家理解其中的不同,认真思考思路的不同,体会编程所谓的高效性。

题目很简单

输入三个是X,Y,Z将这三个数从小到大输出

示例

输入:12,11,24

输出:11,12,24

这个题目,就是让我们给三个变量进行排序,因为这三个都是变量,所以x,y,z究竟谁大谁小我们不清楚,我们的任务就是,在不确定变量对应关系的情况下,确保排序的准确。

既然目标明确了,我们就很好下手了:无非就是判断

解法一:死皮赖脸之穷举法

所谓穷举法,我们就是把所有情况都列举出来,都进行判断,从而达到满足一切情况,一力破万法嘛。

那么对于这个题目,我们就有(从小到大排序)

xyz,xzy,yxz,yzx,zxy,zyx  这六种情况

既然把所有情况都列举出来了,那么剩下的就是小卡拉米了

代码如下

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

解法二: 存储数值与交换数值

对于解法二,也很容易理解,就是我们创建相对应的变量,用于专门存储第一大,第二大,最小值,并且通过交换数值达到目的。

代码如下

int main()
{
    int x,y,z,t;
    printf("\n请输入三个数字:\n");
    scanf("%d%d%d",&x,&y,&z);
    if (x>y) { /*交换x,y的值*/
        t=x;x=y;y=t;
    }
    if(x>z) { /*交换x,z的值*/
        t=z;z=x;x=t;
    }
    if(y>z) { /*交换z,y的值*/
        t=y;y=z;z=t;
    }
    printf("从小到大排序: %d %d %d\n",x,y,z);
}

对比两种方法,我们可以发现,第二种的代码量明显少一些,这就体现了我们解题目所需要的高效性并且不要拘泥于一种解法与思路。

对于以后我们的发展也是一样的,码农和程序员的区别也在于这些地方:

程序员懂得如何维护代码,如何最大化利用代码,如何减少内存,如何提高效率,但是码农,就是纯纯的敲代码。

当然,我们没有说码农的不好,只是对于我们的上限来讲,肯定是前者更有利。

题目不难,希望大伙儿也别有收获!

更多推荐

c语言入门题目练习(1) 之 比大小