题目链接:
争夺前五名_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/cd052308a1c44a88ad00255f312c3e14?tpId=107&tags=&title=&difficulty=0&judgeStatus=0&rp=0
知识点:
1. 多次输入使用数组与循环相结合的方式去完成多次输入,从而避免了取定义,初始化多个相关的变量
2. 冒泡排序:
其思想是俩俩相邻的元素进行比较,并且有可能的话,需要进行交换
若待排序的元素有 n 个,则需要进行 n - 1 趟冒泡排序
而且每经过一趟冒泡排序则就需要俩俩元素之间相互比较
即一趟冒泡排序需要进行多少对元素的比较
要想实现,则需要俩个 for 循环
排序的最终结果要么是升序要么是降序
而升序是从小到大的排列的意思,降序则是从大到小排列的意思
假设有 num 个元素
int num = 0,i= 0; scanf("%dn",&num); int arr[50] = {0}; for (i = 0;i < num;i++) { scanf("%d ",&arr[i]); } for (i = 0;i < num-1;i++) { int j = 0; for (j = 0;j < num - 1 - i;j++) { if (arr[j] < arr[j + 1]) { int change = 0; change = arr[j]; arr[j] = arr[j + 1]; arr[j+1] = change; } } }
代码解释:
num - 1 表示冒泡排序的趟数
num - 1 - i 表示一趟冒泡排序需要进行多少对元素的比较,而 - i 是因为每经过一趟排序的比较,一个数的位置就已经确定好了,所以不需要再次去比较这个数
根据题意要求,当排序的元素个数大于5个时,只需要取已经排列好顺序的前五个元素。若要实现这个功能,则:
if (num == 5) //分情况讨论,当 num = 5 时,当 num 大于 5 时 { for (i = 0;i < num-1;i++) { int j = 0; for (j = 0;j < num - 1 - i;j++) { if (arr[j] < arr[j + 1]) { int change = 0; change = arr[j]; arr[j] = arr[j + 1]; arr[j+1] = change; } } } for (i = 0;i附加练习:
最高分数_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/52c18a3b49a54fc98107fbdde1415f90?tpId=107&tags=&title=&difficulty=0&judgeStatus=0&rp=0
正确题解:
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)