作为一个入门小白,每天的练习是必不可少的。最近一直在牛客网刷题,发布在博客上的都是我个人感觉的难点,和我一样的小白可以看看有没有共通之处。如果是大佬来访,有空帮我看看还有没有优化的空间,欢迎各位评论区留言,一起进步喽!
题目链接争夺前五名_牛客题霸_牛客网 (nowcoder.com)
题目如下:
1.我们要输入6和6个成绩,在这里我用到了for循环来解决:
确定学生成绩数在40以内,用int arr[40],scanf()输入a值为6
定义i为循环次数,用a来限制次数,让循环进行6次,输入六个值:99 45 78 67 72 88
2.之后就要进行成绩的排序和比较,这里先不着急,排序,咱们来分析一波:
这里是个冒泡排序,降序排列,分为大循环(换行)和小循环(行内排序):
3.********则我们接下来敲🐎:
如此就可以完成上述冒泡降序排列。
4.接下来,就是输出:这里注意,不管输入几个值,我们排序后只打印前五个数:如🐎所示:
将排好的前五个拿出来,只要前五噢!!!!
5.最终的代码如下:
#include <stdio.h>
int main()
{
int a = 0;
int i = 0;
int arr[40];
scanf("%d", &a);
for (i = 0; i<a; i++)
{
scanf("%d", &arr[i]); //循环输入成绩
}
for (i = 0; i<a - 1; i++) //换行大循环 5次
{
int j = 0;
for (j = 0; j<a - 1 - i; j++) //行内排序
{
int temp = 0;
if (arr[j]<arr[j + 1])
{
temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
for (i = 0; i<5; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
这样看下来感觉也不太难嘛......可我整了两小时,中间问题百出,调试监控花了好长时间
好无奈,代码肯定不完美,友友们看看能不能再简洁些,私信我或评论区留言,让我学习一下,感谢大家!