一直WA的代码想不通为什么:
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int a[1005];
int b[1005];
int main(){
int k,i,T,m;
float money,tmp,d,sum;
cin>>T;
while(T-- ){
sum = 0;
cin>>money;
cin>>k;
for(i=0;i<k;i++){
cin>>a[i]>>b[i];
}
while(1){
tmp = 100;
for(i=0;i<k;i++){
if(tmp>a[i]){
tmp = a[i];
m=i;
a[i]+=1005;}
}
d=money/tmp;
if(b[m]>=d)
{
sum+=d;
printf("%.2f\n",sum);
break;
}
else
sum+=b[m];
money-=tmp*b[m];
}
}
}
后来换了一种思路终于AC的:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int a[1005];
int main(){
int i,j,T,k,m,n,d;
float money,sum,tmp;
cin>>T;
while(T--){
cin>>money;
cin>>k;
sum=0;
for(d=0;d<1005;d++)//不能用memset()函数初始化0,第二次执行这个,不会初始化上次被赋值过的数组
a[d]=0;
for(i=0;i<k;i++){
cin>>n>>m;
a[n]+=m;//用下面的循环把单价按照从小到大排列了,又把数量存在了单价里
}
for(j=0;j<1005;j++){
if(a[j]!=0){
if(money>0){
tmp=money/j;
if(tmp>a[j]){
sum+=a[j];
money-=j*a[j];}
else{
sum+=tmp;
printf("%.2f\n",sum);
break;
}
}
else{
printf("%.2f\n",sum);
cout<<endl;
break;
}
}
}
}
}