题目1034:寻找大富翁
题目描述:
浙江桐乡乌镇共有n个人,请找出该镇上的前m个大富翁.
输入:
输入包含多组测试用例.
每个用例首先包含2个整数n(0<n<=100000)和m(0<m<=10)
,其中: n为镇上的人数,m为需要找出的大富翁数, 接下来一行输入镇上n个人的财富值.
n和m同时为0时表示输入结束.
输出:
请输出乌镇前m个大富翁的财产数,财产多的排前面,如果大富翁不足m个,则全部输出,每组输出占一行.
样例输入:
3 1
2 5 -1
5 3
1 2 3 4 5
0 0
样例输出:
5
5 4 3
来源:
2009年浙江大学计算机及软件工程研究生机试真题
code
C语言实现
#include<stdio.h>
int main() {
int i,j;
int *p=NULL;
int *q=NULL;
int n,m,temp;
while( scanf("%d %d",&n,&m) ==2) {
if (n == 0 && m == 0)
break;
else if (n<0 || n>100000 || m<0 || m>10)
continue;
else {
p = (int *)malloc(sizeof(int)*n);
q = (int *)malloc(sizeof(int)*m);
for(i=0;i<n;i++)
scanf("%d",p+i);
for(i=0;i<m ;i++)
for (j=0;j<n-1-i;j++)
if (p[j]>p[j+1]){
temp = p[j];
p[j] = p[j+1];
p[j+1] = temp;
}
for (i=n-1;i>n-m && i>0;i--)
printf("%d ",p[i]);
printf("%d\n",p[i]);
}
}
return 0;
}
/**************************************************************
Problem: 1034
User: langzimaizan
Language: C
Result: Accepted
Time:20 ms
Memory:1104 kb
****************************************************************/
开始 遇到了 超时错误 Time Limit Exceed
#include<stdio.h>
int main() {
int i,j;
int *p=NULL;
int *q=NULL;
int n,m,temp;
while( scanf("%d %d",&n,&m) ==2) {
if (n == 0 && m == 0)
break;
else if (n<0 || n>100000 || m<0 || m>10)
continue;
else {
p = (int *)malloc(sizeof(int)*n);
q = (int *)malloc(sizeof(int)*m);
for(i=0;i<n;i++)
scanf("%d",p+i);
for(i=0;i<n-1;i++)
for (j=0;j<n-1-i;j++)
if (p[j]>p[j+1]){
temp = p[j];
p[j] = p[j+1];
p[j+1] = temp;
}
for (i=n-1;i>n-m;i--)
printf("%d ",p[i]);
printf("%d\n",p[i]);
}
}
return 0;
}
/**************************************************************
Problem: 1034
User: langzimaizan
Language: C
Result: Time Limit Exceed
****************************************************************/