本题要看清题目,弄清楚题目的意思,也考了理解题目意思的能力。题目要求是发票要满足条件才可以报销,发票上不能含有别类东西,而且每类的价格相加不能超过600,所有类相加不能超过一千,所以要用if来判断发票是否满足条件用1,0表示。
程序的结束也要注意一下。
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
char a[30][30],f;
double Q,b[30][30],s[30]={0};
int main()
{
int N;
while(1)
{
scanf("%lf%d",&Q,&N);
if(N!=0)
{
int i,j,m,k;
double M=0;
for(i=0;i<N;i++)
{
scanf("%d",&m);
for(j=0;j<m;j++)
{
getchar();
scanf("%c%c",&a[i][j],&f);
scanf("%lf",&b[i][j]);
for(k=0;k<j;k++)
if(a[i][j]==a[i][k])
{
b[i][j]=b[i][j]+b[i][k];
b[i][k]=0;
}
}
for(j=0;j<m;j++)
{
s[i]+=b[i][j];
if(a[i][j]!='A'&&a[i][j]!='B'&&a[i][j]!='C'||b[i][j]>600.00||s[i]>1000)
{
s[i]=0;
break;
}
}
}
for(i=0;i<N;i++)
M+=s[i];
while(M>Q)
{
double mx=0;
for(i=0;i<N;i++)
if(s[i]!=0)
mx=mx>M-s[i]?mx:M-s[i];
M=mx;
}
printf("%.2lf\n",M);
memset(s,0,sizeof(s));
}
else
break;
}
return 0;
}