这个题,猛一看我还真的的没想出来。借鉴的别人的,不过仍然提交不了,我觉的原因是我用的二维数组,别人是用的结构体。我分别贴下代码,欢迎指导:
我自己的代码
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int cmp(const void *pa,const void *pb)
{
return *(int *)pa<*(int *)pb;
}
int main(){
int c;
int i;
float k=0;
int n,m;
int p[1100][2]={0};
scanf("%d",&c);
while(c--)
{
scanf("%d%d",&n,&m);
i=0;
while(i<m)
{
scanf("%d%d",&p[i][0],&p[i][1]);
i++;
}
qsort(p,m,sizeof(int),cmp);
for(i=0;i<m;i++)
{
if(p[i][0]*p[i][1]>=n&&n!=0)
{
k=k+n/(p[i][0]*1.0);
n=0;
}
else
{
if(n==0) break;
k=k+p[i][1]*1.0;
n=n-p[i][0]*p[i][1];
}
}
printf("%.2f\n",k);
}
return 0;
}
的别人的,是下边的,
#include<stdio.h>
#include<stdlib.h>
struct cc
{
int p;
int h;
} d[1005];
int comp(void const *a,void const *b)
{
struct cc *p1 = (struct cc *)a;
struct cc *p2 = (struct cc *)b;
return p1->p-p2->p;
}
int main()
{
int i,m,n,c;
float t;
scanf("%d",&c);
while(c--)
{
t=0;
scanf("%d %d",&n,&m);
for(i=0; i<m; i++)
{
scanf("%d %d",&d[i].p,&d[i].h);
}
qsort(d,m,sizeof(struct cc),comp);
for(i=0;i<m;i++)
{
if(d[i].p*d[i].h >= n && n!=0)
{
t = t + n/(d[i].p*1.0);
n = 0;
}
else
{
if(n==0)break;
t = t + d[i].h*1.0;
n = n - d[i].p*d[i].h;
}
}
printf("%.2f\n",t);
}
return 0;
}