输入格式:
输入首先给出两个正整数N(≤106)和M(≤10),其中N为总人数,M为需要找出的大富翁数;接下来一行给出N个人的个人资产值,以百万元为单位,为不超过长整型范围的整数。数字间以空格分隔。
输出格式:
在一行内按非递增顺序输出资产排前M位的大富翁的个人资产值。数字间以空格分隔,但结尾不得有多余空格。
输入样例:
8 3
8 12 7 3 20 9 5 18
输出样例:
20 18 12
#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
//函数状态码定义
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
//顺序表的存储结构定义
typedef int ElemType; //假设线性表中的元素均为整型
typedef struct {
ElemType* elem; //存储空间基地址
int length; //表中元素的个数
}SqList; //顺序表类型定义
Status ListSort_Sq(SqList &L);
void ListPrint_Sq(SqList L,int rank);
//结构初始化
Status InitList_Sq(SqList &L) {
//初始化L为有序顺序表
L.elem = (ElemType *)malloc(L.length*sizeof(ElemType));
if (!L.elem)exit(OVERFLOW);
for(int i=0;i<L.length;i++)
scanf("%d",&L.elem[i]);
return 1;
}
int main() {
SqList L;
int num,rank;
scanf("%d%d",&L.length,&rank);
if (!InitList_Sq(L)) {
printf("InitList_Sq: 初始化失败!!!\n");
return -1;
}
ListSort_Sq(L);//从大到小排序
ListPrint_Sq(L,rank);
return 0;
}
Status ListSort_Sq(SqList &L)
{
int i, j, tmp;
for(i=0; i<L.length-1; i++)
{
tmp = L.elem[i];
for(j=L.length-1; j>i; j--)
{
//找到数组中最大的数,并交换
if(tmp < L.elem[j])
{
L.elem[i] = L.elem[j];
L.elem[j] = tmp;
tmp = L.elem[i];
}
}
}
return 1;
}
void ListPrint_Sq(SqList L,int rank)
{
if(rank>=L.length)
rank=L.length;
int j;
for (j = 0; j < rank-1; j++)
printf("%d ", L.elem[j]);
printf("%d\n", L.elem[rank-1]);
}