#include #define MIN(x,y) (((x)<(y))?(x):(y)) #define r1 r[0] #define r5 r[1] #define r10 r[2] #define r25 r[3] #define p1 p[0] #define p5 p[1] #define p10 p[2] #define p25 p[3] int q,r[4],p[4]; void rozdel(int index, int k1, int k5, int k10, int needed) { int m = p[index]/needed; if (k1) m = MIN(m, r1/k1); if (k5) m = MIN(m, r5/k5); if (k10) m = MIN(m, r10/k10); p[index]-=m*needed, r[index]+=m*needed, r1-=m*k1, r5-=m*k5, r10-=m*k10, p1+=m*k1, p5+=m*k5, p10+=m*k10; } void rozdel2(void) { int m=MIN(p5,p25); m = MIN(m,r10/3); p5-=m,p25-=m, r5+=m,r25+=m, p10+=3*m, r10-=3*m; } int main(void) { int minci; int u1,u5,u10, sq,sr1,sr5,sr10,sr25; while (scanf(" %d %d %d %d %d",&q,&r1,&r5,&r10,&r25), q||r1||r5||r10||r25) { sq=q, sr1=r1, sr5=r5, sr10=r10, sr25=r25; for (u1=0;u1<50;u1++) for (u5=0;u5<10;u5++) for (u10=0;u10<5;u10++) { q=sq, r1=sr1, r5=sr5, r10=sr10, r25=sr25, p25=p10=p5=p1=0; p1=q; if (p1>r1) p1=r1; p1-=u1; if(p1<0) p1=0; r1-=p1; q-=p1; p5=q/5; if (p5>r5) p5=r5; p5-=u5; if(p5<0) p5=0; r5-=p5; q-=p5*5; p10=q/10; if (p10>r10) p10=r10; p10-=u10; if(p10<0) p10=0; r10-=p10; q-=p10*10; p25=q/25; if (p25>r25) p25=r25; r25-=p25; q-=p25*25; /* printf(" %d",q);*/ if (!q) goto presa; } presa: if (q) { printf("Charlie cannot buy coffee.\n"); continue; } do { minci = p1+p5+p10+p25; rozdel(3, 25,0,0,1); rozdel(3, 20,1,0,1); rozdel(3, 15,2,0,1); rozdel(3, 15,0,1,1); rozdel(3, 10,3,0,1); rozdel(3, 10,1,1,1); rozdel(3, 5,4,0,1); rozdel(3, 5,2,1,1); rozdel(3, 5,0,2,1); rozdel(3, 0,5,0,1); rozdel(3, 0,3,1,1); rozdel(3, 0,1,2,1); rozdel(3, 0,0,5,2); rozdel2(); rozdel(2, 10,0,0,1); rozdel(2, 5,1,0,1); rozdel(2, 0,2,0,1); rozdel(1, 5,0,0,1); } while(p1+p5+p10+p25 < minci); printf("Throw in %d cents, %d nickels, %d dimes, and %d quarters.\n", p1, p5, p10, p25); /* printf("%d",p1 + p5*5 + p10*10 + p25*25);*/ } return 0; }