每日一个简单程序之HDU2016
最近有点乱,工作上不是很轻松,所以学习和刷题的进度奇差无比,好不容今天做了个题目,一直提示,输出格式错误,Problem Description
输入n(n<100)个数,找出其中最小的数,将它与最前面的数交换后输出这些数。
Input
输入数据有多组,每组占一行,每行的开始是一个整数n,表示这个测试实例的数值的个数,跟着就是n个整数。n=0表示输入的结束,不做处理。
Output
对于每组输入数据,输出交换后的数列,每组输出占一行。
Sample Input
4 2 1 3 4
5 5 4 3 2 1
0
Sample Output
1 2 3 4
1 4 3 2 5
那么聪明的各位,能帮我纠正下我的代码中的问题吗
程序代码:
#include<stdio.h> int main() { int n,i,temp,m=0,a[99],min; while(scanf("%d",&n))//很多人都写//while(scanf("%d",&n),n),我不懂这是什么意思,求教 { if(n==0) break;//输入的n为0时,直接结束程序 scanf("%d",&a[0]);//给数组第一元素a[0]赋值,用于后期比较 min=a[0];//将a[0]设为最小值先 for(i=1;i<n;i++) { scanf("%d",&a[i]);//i设初值为1,这样是从数组第二个元素开始输入 if(a[i]<min) { m=i; min=a[m]; //比较过程,将i这这个过程中的值,标记为m,因为for循环有个奇怪的地方, //当i判断小于n,比如n=5的时候,i在为4时退出循环,但是i++这个表达式把i++的 //的值储存了下来,所以,在跳出循环使用i,i就编程5,而不是你想要的那个4,或者其他 } } temp=a[0]; //转换过程,将标记的最小的数值与a[0]交换 a[0]=a[m]; // a[m]=temp; // for(i=0;i<n;i++) printf("%d",a[i]);//输出数组就可以了 m=0; //这里的话,有个小陷阱,比如你输入n=5,然后分别输入,1,2,3,4,5; //他会输出一个正确的排序,即1,2,3,4,5, //而如果你输入n=5,然后输入,2,1,3,4,5,那么此时的m,即为1,元素a[1]; //当你下次再输入n=5,然后1,2,3,4,5,的时候,m=1被储存了下来,输出就成了2,1,3,4,5, //故,m在每次结束循环时,归0; } }代码我自己精简了半天,而且我认为比网上AC的答案要容易懂,注释很多,希望大家能快些看懂,帮我解决这个问题,谢谢各位。