Description
输入m(0<m<100)个整数,从大到小输出其中最大的前n个,若m<=n,则从大到小输出全部的数.
Input
输入为一行,分别是m、n和m个整数.输入格式见sample input.
Output
从大到小输出其中最大的前n个,若m<=n,则从大到小输出全部的数.输出格式见sample output.
Sample Input
10 3 1 2 3 4 5 6 7 8 9 10
Sample Output
10 9 8
答案:
#include <stdio.h>
#include <stdlib.h>
void ppf(int a[100],int m)//冒泡排序法(从大到小)
{
for(int i=0; i<m-1; i++)
{
for(int j=0; j<m-1-i; j++)
{
if(a[j]<a[j+1])
{
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
int main()
{
int m,n;
int a[100]= {0};
scanf("%d%d",&m,&n);
for(int i=0; i<m; i++)
{
scanf("%d",&a[i]);
}
ppf(a,m);
if(m<=n) n=m;
if(n!=0)printf("%d",a[0]);
for(int j=1; j<n; j++)
{
printf(" %d",a[j]);
}
return 0;
}
排序方法试试快排
#include <stdio.h>
#include <stdlib.h>
int compare(const void *a,const void *b)
{
return -(*(int *)a-*(int *)b);
}
int main()
{
int m,n;
int a[100]= {0};
scanf("%d%d",&m,&n);
for(int i=0; i<m; i++)
{
scanf("%d",&a[i]);
}
qsort(a,m,sizeof(int),compare);
if(m<=n) n=m;
if(n!=0)printf("%d",a[0]);
for(int j=1; j<n; j++)
{
printf(" %d",a[j]);
}
return 0;
}