swust oj 616
题目描述
用选择法对N个学生的成绩按从大到小的顺序排序,N个学生的成绩整数用scanf 输入,输入的成绩在[0,100]之间。排序完成后,输入一个成绩,要求用逐个比较查找的方式找出该成绩是该组中第几个元素的值(即第几名)。如果该成绩不在数组中,则输出“no this score!”。 要求: 1、把排序算法写成函数形式,在主函数中输入N个数据,然后调用排序函数排序。 2、在排序过程中尽量减少数据的交换和移动。 3、把查找算法写成函数形式,在主函数中输入1个数据,然后调用查找函数查找。
输入
输出
样例输入
样例输出
源代码
#include<stdio.h>
int main()
{
int i,n,m,a[50];
int f(int a[],int n);
int g(int a[],int n,int m);
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
scanf("%d",&m);//输入选择你想找的数
a[n]=f(a,n);
g(a,n,m);
}
return 0;
}
int f(int a[],int n)//书上重点讲过的排序代码
{
int i,j,t;
for(i=0;i<(n-1);i++)
{
for(j=i+1;j<n;j++)
{
if(a[i]<a[j])
{
t=a[i];//应用变量t实现两个数之间的顺序改变
a[i]=a[j];
a[j]=t;
}
}
}
for(i=0;i<n;i++)
{
printf("%d",a[i]);
if((i+1)%10==0 ||i==(n-1))
printf("\n");
else
printf(" ");
}
return a[n];
}
int g(int a[],int n,int m)
{
int i=0,j=0;
while(i<n)//我试着用for循环,但是OJ不通过。但其实本身意义是相同的
{
if(m==a[i])
{
j++;
break;
}
i++;
}
if(j!=0)
printf("%d\n",i+1);
else
printf("no this score!\n");
return 0;
}