标签:
题目链接:http://ac.jobdu.com/problem.php?pid=1034
3 1 2 5 -1 5 3 1 2 3 4 5 0 0
5 5 4 3
这个题目比较简单,思路:
如果n<=m则输入n个数到数组中,然后降序排序,接着直接输出;
若是n>m,则先输入前m个数到数组中。然后当每次输入一个数temp,则判断temp是否比数组中最小的数min大,若是则覆盖掉数组中最小数字min,否则跳过,输入下一个,然后继续……
输入并处理完成后,降序排序,然后输出即可。
代码如下:
1 #include<stdio.h> 2 #include<stdlib.h> 3 int cmp(const void *a,const void *b) 4 { 5 return *(int*)b- *(int *)a; 6 } 7 int finMinIndex(int a[],int len);//返回a数组最小元素的下标。a数组元素个数为len 8 int main() 9 { 10 int n,m; 11 int a[11]={0}; 12 int i; 13 int mini; 14 int temp; 15 16 while(scanf("%d%d",&n,&m)!=EOF) 17 { 18 if(n==0&&m==0) break; 19 if(n<=m) 20 { 21 for(i=0;i<n;i++) scanf("%d",&a[i]); 22 qsort(a,n,sizeof(a[0]),cmp); 23 printf("%d",a[0]); 24 for(i=1;i<n;i++) printf(" %d",a[i]); 25 printf("\n"); 26 } 27 else 28 { 29 for(i=0;i<m;i++) 30 { 31 scanf("%d",&a[i]); 32 } 33 for(i=m;i<n;i++) 34 { 35 scanf("%d",&temp); 36 mini=finMinIndex(a,m); 37 if(temp>a[mini]) a[mini]=temp; 38 } 39 qsort(a,m,sizeof(a[0]),cmp); 40 printf("%d",a[0]); 41 for(i=1;i<m;i++) printf(" %d",a[i]); 42 printf("\n"); 43 } 44 } 45 return 0; 46 } 47 int finMinIndex(int a[],int len)//返回a数组最小元素的下标。a数组元素个数为len 48 { 49 int i,minIndex=0; 50 for(i=1;i<len;i++) 51 { 52 if(a[i]<a[minIndex]) minIndex=i; 53 } 54 return minIndex; 55 }
标签:
原文地址:http://www.cnblogs.com/huashanqingzhu/p/4388490.html