从零学习算法竞赛2:三整数排序
来源:互联网 发布:软件需求变更 编辑:程序博客网 时间:2024/06/02 15:23
题目描述:
输入3个整数,从小到大排序后输出。
样例输出:
20 7 33
7 20 33
分析:三个数的顺序一共有六种可能:abc,acb,bac,bca,cab,cba,所以最简单的思路是使用6条if语句。
#include<stdio.h>int main(){ int a,b,c; scanf("%d%d%d",&a,&b,&c); if(a<b&&b<c) printf("%d %d %d\n",a,b,c); if(a<c&&c<b) printf("%d %d %d\n",a,c,c); if(b<a&&a<c) printf("%d %d %d\n",b,a,c); if(b<c&&c<a) printf("%d %d %d\n",b,c,a); if(c<a&&a<b) printf("%d %d %d\n",c,a,b); if(c<b&&c<a) printf("%d %d %d\n",c,b,a); return 0;}
上述程序看上去没错,而且能通过题目中给出的样例,但可惜有缺陷:输入“1 1 1”将得不到任何输出!这个例子说明:即使通过了题目给出的样例,程序仍然可能存在问题,不要自认为通过几个样例程序就一定正确!!!
算法竞赛的目标是编程对任意输入均得到正确的结果,而不仅是样例数据。
将程序稍作修改:把所以的小于符号“<”改成小于等于”<=“(在一个小于号后添加一个等号)。这样总可以了吧?很遗憾,还是不行。对于“1 1 1”,6种情况全部符合,程序一共输出了6次“1 1 1”。
一种解决方案是人为地让6种情况没有交叉:把所以的if改成else if。
三整数排序(2)
#include<stdio.h>int main(){ int a,b,c; scanf("%d%d%d",&a,&b,&c); if(a<=b&&b<=c) printf("%d %d %d\n",a,b,c); if(a<=c&&c<=b) printf("%d %d %d\n",a,c,b); if(b<=a&&a<=c) printf("%d %d %d\n",b,a,c); if(b<=c&&c<=a) printf("%d %d% d\n",b,c,a); if(c<=a&&a<=b) printf("%d %d %d\n",c,a,b); if(c<=b&&b<=a) printf("%d %d %d\n",c,b,a); return 0;}
最后一条语句还可以简化成单独的else。
另一种思路是把a,b,c这3个变量本身改成a≤b≤c的形式。首先检查a和b的值,如果a>b,则交换a和b(利用前面讲过的三遍量交换法);接下来检查a和c,最后检查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; }//执行完之后a<=b if(a>c) { t=b; a=c; c=t; }//执行完后a<=c,且a<=b仍然成立 if(b>c) { t=b; b=c; c=t; } printf("%d %d %d\n",a,b,c); return 0;}总结:
一是重视实验。哪怕不理解背后的道理,至少要清楚现象。
二是学会模仿。有些时候就是要不求甚解,比如,#include<stdio.h>,考虑学习规律而做出的决策。
0 0
- 从零学习算法竞赛2:三整数排序
- 从零学习算法竞赛1: 变量交换
- 从零学习算法竞赛3:aabb问题
- {算法}三整数排序
- 从零学习Belief Propagation算法(三)
- Python3从零学习(三)
- 【从零学习经典算法系列】分治策略实例——归并排序(Mergesort)
- 【从零学习经典算法系列】分治策略实例——快速排序(QuickSort)
- 从零学习Swift<2>
- 菜菜从零学习WCF三(配置服务)
- 算法学习(三)--插入排序
- 算法竞赛入门经典 第一,二,三章学习笔记
- 【从零学习经典算法系列】分治与递归2——主方法
- 从零学习Belief Propagation算法(一)
- 从零学习Belief Propagation算法(二)
- 【回顾】从零入门机器学习算法与实践
- 算法学习(排序三)快速排序
- 从零学习Python,每日2小时
- 【hihocoder】hiho密码
- 方阵的生成、显示、检查
- Sqoop
- android-时间选择器
- 5.0以上移动数据的关闭
- 从零学习算法竞赛2:三整数排序
- 设计模式有感
- 函数原型和函数
- ubuntu 14.04 64位 桌面版 中文输入法安装
- boa.conf基本配置详解
- 算法#01--素数和牛顿迭代法求平方根
- c——————指针之易错点
- Routable-iOS
- log4j使用教程详解(怎么使用log4j2)