#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 uber_deset, 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 (uber_deset=0;uber_deset<2;uber_deset++) { q=sq, r1=sr1, r5=sr5, r10=sr10, r25=sr25, p25=p10=p5=p1=0; p25=q/25; if (p25>r25) p25=r25; p25-=uber_deset; if (p25<0) p25=0; r25-=p25; q-=p25*25; p10=q/10; if (p10>r10) p10=r10; r10-=p10; q-=p10*10; p5=q/5; if (p5>r5) p5=r5; r5-=p5; q-=p5*5; p1=q; if (p1>r1) p1=r1; r1-=p1; q-=p1; if (!q) break; } 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; }