大家好,我是来自杭电的一名大一学生,对编程有极高的兴趣,希望有一天能进入杭电ACM的校队,然后代表杭电出战,获得奖牌,最后争取本科毕业前拿到大厂的offer。
我打算大一学好c语言,大二再把java的基础打厚实,自己准备把能抽出来的时间都来学习编程。
因为我想留在杭州,所以我最想去的大厂是华为和阿里巴巴。
题目描述输入三个整数,从小到大排序后输出。
样例输入
56 78 4
样例输出
4 56 78
思路:由于三个数最多有六种可能的顺序:abc acb bac bca cab cba 最简单的还是if 语句#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; }
这样是不对的,因为当两个数相同时,将得不到任何输出。
所以要对程序进行修改,将“<”全部改成“<=”,为了避免打出多行顺序,我们在if前加个else。
#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); 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 if (c <= b && b <= a) printf("%d %d %d", c, b, a); return 0; }
我们也可以换种思路,用空篮子替换的方法。
#includeint 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 %dn", a, b, c); return 0; }
第一次检查之后,必然有a≤b,第二次检查以后a的值不会变大所以a≤b依然成立,换句话说a已经是三个数的最小值,



