#include <stdio.h> #include <stdlib.h> #include <string.h> #include <math.h> /*本题思路:第一步,将苹果的数量*10000+梨的数量存入一个单独的数组里面,然后每次按次序挑选数组里最大的值,直到挑选了m个篮子*/ int MAX(int v[],int n)//每次循环选择v中最大的值 { int max=0; for(int i=0;i<n;i++) { if(v[i]>v[max]&&v[i]!=-1) { max=i; } } v[max]=-1;//为了防止最大的值被再次选中,每次将已经选择的值设置为-1 return max+1; } int main() { int t; scanf("%d",&t); while(t--) { int n,m,i,max; scanf("%d%d",&n,&m); int a[100000][2]; int v[100000]={0}; for(i=0;i<n;i++) { scanf("%d%d",&a[i][0],&a[i][1]); v[i]=a[i][0]*100000+a[i][1];//将苹果与梨的权值和存入v数组 } for(i=0;i<m;i++) { max=MAX(v,n); if(i==m-1) { printf("%d\n",max); } else { printf("%d ",max); } } } return 0; } |
Double click to view unformatted code.