题解 | #争夺前五名#
争夺前五名
http://www.nowcoder.com/practice/cd052308a1c44a88ad00255f312c3e14
貌似题解可以附上本题的链接,那就不重复描述了,开冲。
所有要注意的点都写在注释里了,另外交换两个数的方法用的是左老师推荐的异或,非常好使,nb就vans了。
#include <stdio.h> int main(){ int num, i, j; scanf("%d", &num); // 判断一下学生数量够不 if(num<5||num>40) return false; int a[num]; // 先初始化数组 for(i=0;i<=num;i++) a[i]={0}; for(i=0;i<num;i++) { scanf("%d", &a[i]); // 对当前位置上的数与它右边的数进行比较 // 当前数小就往后挪 // 当前数大就把下标往前移一位,再继续比 for(j=i;j>=0;j--) { if(a[j]<a[j+1]) { a[j] = a[j]^a[j+1]; a[j+1] = a[j]^a[j+1]; a[j] = a[j]^a[j+1]; } } } // 最后输出前五个 for(i=0;i<5;i++) printf("%d ", a[i]); return 0; }