成绩排序查找

西南科技大学

ACM解题报告

姓名:张艺童

学号:5120142109

组号:3

班级:软件1402

1 题目来源:OJ  0616

2 题目描述:

Description:

用选择法对N个学生的成绩按从大到小的顺序排序,N个学生的成绩整数用scanf 输入,输入的成绩在[0,100]之间。排序完成后,输入一个成绩,要求用逐个比较查找的方式找出该成绩是该组中第几个元素的值(即第几名)。如果该成绩不在数组中,则输出“no this score!”。 要求: 1、把排序算法写成函数形式,在主函数中输入N个数据,然后调用排序函数排序。 2、在排序过程中尽量减少数据的交换和移动。 3、把查找算法写成函数形式,在主函数中输入1个数

Input:

输入共有三行:第一行是一个数N(N < 50),表示学生的人数; 第二行输入N个学生的成绩; 第三行输入一个数m(你要查找的成绩)

Otput:

第一行输出N个已经排好序的成绩,每两个成绩之间有一个空格隔开,每10个数据换一行(由大到小排列)。 第二行输出你要查找的成绩的名次(如果成绩相同,则并列)。具体的见Sample Output。

Sample iutput

1

2

3

4

5

6

7

15

23 32 43 54 65 65 78 87 98 87 76 76 76 55 65

87

23

32 43 54 89 89 78 89 78 55 65 76 87 87 87 65 65 89 86 65 78 54 57 54

86

Sample Onput

1

2

3

4

5

6

7

8

98 87 87 78 76 76 76 65 65 65

55 54 43 32 23

2

89 89 89 89 87 87 87 86 78 78

78 76 65 65 65 65 57 55 54 54

54 43 32

8

3 题目分析及知识点:

选择排序的正确使用,因为成绩可能会有几个人有相同成绩的情况,所以用二分查找是极有可能出错的,我选择了从数组的首元素开始比对查找的方式。这样会比较满足题目的要求。

4 AC源代码:

#include<stdio.h>

int main()
{
void select_sort(int a[],int n);
int find(int b[],int n,int key);
int n,a[50],m,s;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&m);
select_sort(a,n);
for(int j=0;j<n-1;j++)
{
printf("%d",a[j]);
if((j+1)%10==0)
{
printf("\n");
}
else
printf(" ");

}
printf("%d\n",a[n-1]);

s=find(a,n,m);
if(s>0)
printf("%d\n",s);
else
printf("no this score!\n");
return 0;
}

void select_sort(int a[],int n)
{
register int i,j,max,t;
for(i=0;i<n-1;i++)
{
max=i;
for(j=i+1;j<n;j++)
if(a[max]<a[j])
max=j;
if(max!=i)
{
t=a[max];
a[max]=a[i];
a[i]=t;
}
}
}

int find(int b[],int n,int key)
{
int g,k;
for( k=0;k<n;k++)
{
if(b[k]==key) break;
}
if(k<n-1)
g= k+1;
else
{
if (b[k]==key)
g= k+1;
else
g= -1;
}
return (g);
}

5 做题心得:

开始出现的问题就是用来二分查找,忽视了其他情况的出现,自己的运行都不对。

后来用另一种方式来查找之后,可解决这个问题。从这道题里我学会的是考虑所采用方法不可避免的弊端,是否与题目的要求冲突。如果冲突就要采取其他的方式。

时间: 2024-10-10 21:15:21

成绩排序查找的相关文章

刷题1:成绩排序

刷题1:成绩排序 来源:https://www.nowcoder.com/practice/0383714a1bb749499050d2e0610418b1 题目: 查找和排序 题目:输入任意(用户,成绩)序列,可以获得成绩从高到低或从低到高的排列,相同成绩 都按先录入排列在前的规则处理. 示例: jack 70 peter 96 Tom 70 smith 67 从高到低 成绩 peter 96 jack 70 Tom 70 smith 67 从低到高 smith 67 jack 70 Tom

03:成绩排序

03:成绩排序 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 给出班里某门课程的成绩单,请你按成绩从高到低对成绩单排序输出,如果有相同分数则名字字典序小的在前. 输入 第一行为n (0 < n < 20),表示班里的学生数目:接下来的n行,每行为每个学生的名字和他的成绩, 中间用单个空格隔开.名字只包含字母且长度不超过20,成绩为一个不大于100的非负整数. 输出 把成绩单按分数从高到低的顺序进行排序并输出,每行包含名字和分数两项,之间有一个空格.

题目1196:成绩排序

题目描述: 用一维数组存储学号和成绩,然后,按成绩排序输出. 输入: 输入第一行包括一个整数N(1<=N<=100),代表学生的个数. 接下来的N行每行包括两个整数p和q,分别代表每个学生的学号和成绩. 输出: 按照学生的成绩从小到大进行排序,并将排序后的学生信息打印出来. 如果学生的成绩相同,则按照学号的大小进行从小到大排序. 样例输入: 3 1 90 2 87 3 92 样例输出: 2 87 1 90 3 92 C++代码: #include<iostream> #includ

九度oj 题目1061:成绩排序

题目1061:成绩排序 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:24473 解决:6960 题目描述: 有N个学生的数据,将学生数据按成绩高低排序,如果成绩相同则按姓名字符的字母序排序,如果姓名的字母序也相同则按照学生的年龄排序,并输出N个学生排序后的信息. 输入: 测试数据有多组,每组输入第一行有一个整数N(N<=1000),接下来的N行包括N个学生的数据.    每个学生的数据包括姓名(长度不超过100的字符串).年龄(整形数).成绩(小于等于100的正数). 输出: 将学

【转载】Java集合类的排序,查找,替换操作

转自:http://blog.csdn.net/sunhuaqiang1/article/details/52142873 前言 在Java方向校招过程中,经常会遇到将输入转换为数组的情况,而我们通常使用ArrayList来表示动态数组.获取到ArrayList对象后,我们可以根据Collection中的方法进行排序,查找,替换操作.而不用在东奔西走的利用什么各种排序算法.正则来实现了.在进行数组排序时,有时反而会因为参数问题而大费周折.例如,自己在利用快排进行数组排序时,当将参数(int []

九度oj 题目1196:成绩排序

题目1196:成绩排序 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5192 解决:1792 题目描述: 用一维数组存储学号和成绩,然后,按成绩排序输出. 输入: 输入第一行包括一个整数N(1<=N<=100),代表学生的个数.接下来的N行每行包括两个整数p和q,分别代表每个学生的学号和成绩. 输出: 按照学生的成绩从小到大进行排序,并将排序后的学生信息打印出来.如果学生的成绩相同,则按照学号的大小进行从小到大排序. 样例输入: 3 1 90 2 87 3 92 样例输出: 2

查询每门学科成绩在前2位的记录,并按学科,成绩排序

现在有学生成绩表,结构如下 Create Table StuAchievement ( StuId varchar(8), CourseId varchar(10), Achievement int ) 数据就自己动动手录入吧 SELECT * FROM StuAchievement A WHERE EXISTS( SELECT TOP 1 * FROM StuAchievement b WHERE a.CourseId=b.CourseId AND b.Achievement >a.Achie

Java数据结构 遍历 排序 查找 算法实现

1. 遍历算法(遍历二叉树6种方法) 1.1. 概述 遍历算法针对二叉树而言的,主要有先序.中序.后序三种遍历顺序,三种顺序又分别有递归和常规算法,二叉树遍历的主要思想是:遍历左子树,遍历右子树,访问根节点,由这三者的遍历顺序来确定是先序.中序还是后序.下面只要求掌握递归遍历算法,常规遍历算法见附录一. 1.2. 先序遍历算法 遍历顺序:访问根节点,遍历左子树,遍历右子树.代码如下: void preOrder(BinaryTreeNode bt) { if (bt == null)// 如果当

实验12:Problem I: 成绩排序

Home Web Board ProblemSet Standing Status Statistics Problem I: 成绩排序 Problem I: 成绩排序 Time Limit: 1 Sec  Memory Limit: 128 MBSubmit: 490  Solved: 403[Submit][Status][Web Board] Description 定义Student类: 1. 数据成员string name和int score表示一个学生的姓名.成绩. 2. 无参构造函