
题目链接:
争夺前五名_牛客题霸_牛客网 (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条)