解题思路1:
如果说你有必要打开题解来通关而不是交流讨论,那第一种方法很适合。它至少表明,实际上不打开题解,这道题有一个最基础的可以运行出来的思路:列出来。
三个数字六种排序方法,每一个都罗列出来,终归是一种办法。
1)条件是两个并存条件,用&&;
2)注意题目要求输出空格间隔
printf("%d %d %d",a,b,c);
就可以了。
参考代码1:
#includeint main() { int a,b,c; scanf("%d%d%d",&a,&b,&c); if(a<b&&b<c) printf("%d %d %d",a,b,c); if(a<c&&c<b) printf("%d %d %d",a,c,b); if(b<a&&a<c) printf("%d %d %d",b,a,c); if(b<c&&c<a) printf("%d %d %d",b,c,a); if(c<a&&a<b) printf("%d %d %d",c,a,b); if(c<b&&b<a) printf("%d %d %d",c,b,a); return 0; }
解题思路2:
罗列需要按顺序,否则会乱,这个顺序就是三个数要排列的顺序,所以第二种方法指的是:交换顺序。
首先,我们要明白两个数如何交换。例如,如果说要交换a和b的值,留一个位置缓存就行,可以运行体会一下
int a,b,t; scanf("%d%d",&a,&b); t=a; a=b; b=t; printf("%d%d",a,b);
从小到大,那么第一步就是让最小的到第一个。
最小的数可能在三个位置(1,2,3),所以用三个位置的数字和第一位的数字比较,比出来最小的与第一位交换;
接下来第二小的,它有可能在两个位置(2,3),所以用后两个位置的数字和第二位的数字比较,比出来小的与第二位交换;
最后是最大的,它只有可能在一个位置(3),理论上它要和自己比,比出来小的交换。
这是理论上,实际上我们都知道,自己不用和自己比,也不用和自己交换。
所以真正写代码只要第一位和第二、三位比较,如果后面的小则交换;接着第二位和第三位比较,如果后面小则交换,三次比较就可以了。
参考代码2:
#include int main() { int a,b,c,d; scanf("%d%d%d",&a,&b,&c); if(a>b) { d=a; a=b; b=d; } if(a>c) { d=a; a=c; c=d; } if(b>c) { d=b; b=c; c=d; } return 0; }
解题思路3:
最后解释一下三目运算。
?是一种判断和选择,如果前面的是真,就执行后面括号内的第一个语句;如果前面的是假,就执行后面的第二个语句。
判断最大值思路是这样的:
(a和b中选出来大的)和c比,谁大谁就最大。
a和b比
(a>b)?
比的是谁大,a>b为真a就是较大值,为假b就是较大值
(a>b?a:b)
和c比
(a>b?a:b)>c?
(a>b?a:b)>c为真就留下ab比出来的较大值作为最大值,(a>b?a:b)>c为假c就是最大值
(a>b?a:b)>c?(a>b?a:b):c)
最小值和中间值同理。
明白了这些,那么整个主函数,只要输入输出就可以了。
代码:
#includeint main() { int a,b,c; scanf("%d%d%d",&a,&b,&c); printf("%d %d %d\n",(a<b?a:b)<c?(ab?(ac?b:c)):(ac?c:b):a), (a>b?a:b)>c?(a>b?a:b):c); return 0; }
0.0分
32 人评分