2105 - 找零钱

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 128 MB

小智去超市买东西,买了不超过一百块的东西。收银员想尽量用少的纸币来找钱。
纸币面额分为50 20 10 5 1 五种。请在知道要找多少钱n给小明的情况下,输出纸币数量最少的方案。 1<=n<=99;

题目输入

有多组数据  1<=n<=99;

题目输出

对于每种数量不为0的纸币,输出他们的面值*数量,再加起来输出

输入/输出样例

输入格式

25
32

输出格式

20*1+5*1
20*1+10*1+1*2

C语言解答

#include<stdio.h>
#include<string.h>
main()
{
	int count[5],signal,n;
	while(scanf("%d",&n)!=EOF)
	{
		memset(count,0,sizeof(count));
		signal=0;
		if(n>=50)
		{
		count[0]=n/50;
		n-=count[0]*50;
		if(count[0]!=0)
		{
			signal=1;
		printf("50*%d",count[0]);
		}
		}
		if(n>=20)
		{
		count[1]=n/20;
		n-=count[1]*20;
		if(count[1]!=0)
		{
		if(signal)
		printf("+");
		signal=1;
		printf("20*%d",count[1]);
		}
		}
		if(n>=10)
		{
		count[2]=n/10;
		n-=count[2]*10;
		if(count[2]!=0)
		{
		if(signal)
		printf("+");
		signal=1;
		printf("10*%d",count[2]);
		}
		}
		if(n>=5)
		{
		count[3]=n/5;
		n-=count[3]*5;
		if(count[3]!=0)
		{
		if(signal)
		printf("+");
		signal=1;
		printf("5*%d",count[3]);
		}
		}
		if(n>=1)
		{
		count[4]=n;
		if(count[4]!=0)
		{
		if(signal)
		printf("+");
		printf("1*%d",count[4]);
		}
	    }
	    printf("\n");
	}
}

C++解答

/*
题目:找零钱
题目描述:小智去超市买东西,买了不超过一百块的东西。收银员想尽量用少的纸币来找钱。
纸币面额分为50 20 10 5 1 五种。请在知道要找多少钱n给小明的情况下,输出纸币数量最少的方案。 1<=n<=99;
输入:有多组数据  1<=n<=99;
输出:对于每种数量不为0的纸币,输出他们的面值*数量,再加起来输出
样例输入:
25
32
样例输出:
20*1+5*1
20*1+10*1+1*2
*/
#include<iostream>
#include<stdio.h>
#include<string>
#include<algorithm>
#include<string.h>
#include<set>
#include<vector>
#include<queue>
#include<stack>
#include<limits.h>
#include<math.h>
#define FOR(i,a,b) for(int i=(a);i<(b);i++)
#define FORD(i,a,b) for(int i=(a);i<=(b);i++)
#define REP(i,b) FOR(i,0,b)
#define CLR(a) memset(a,0,sizeof(a))
using namespace std;
#define maxn 20010
int main(){
    //freopen("B.in","r",stdin);
    //freopen("B.out","w",stdout);
    int n;
    while(~scanf("%d",&n)){
        int a[51];
        CLR(a);
        int dn=n;
        while(dn>=50){
            dn-=50;
            a[50]++;
        }
        while(dn>=20){
            dn-=20;
            a[20]++;
        }
        while(dn>=10){
            dn-=10;
            a[10]++;
        }
        while(dn>=5){
            dn-=5;
            a[5]++;
        }
        while(dn>=1){
            dn--;
            a[1]++;
        }
        int flag=0;
        if(a[50]>0){
            if(flag==0){
                flag=1;
            }
            else{
                printf("+");
            }
            printf("50*%d",a[50]);
        }
        if(a[20]>0){
            if(flag==0){
                flag=1;
            }
            else{
                printf("+");
            }
            printf("20*%d",a[20]);
        }
        if(a[10]>0){
            if(flag==0){
                flag=1;
            }
            else{
                printf("+");
            }
            printf("10*%d",a[10]);
        }
        if(a[5]>0){
            if(flag==0){
                flag=1;
            }
            else{
                printf("+");
            }
            printf("5*%d",a[5]);
        }
        if(a[1]>0){
            if(flag==0){
                flag=1;
            }
            else{
                printf("+");
            }
            printf("1*%d",a[1]);
        }
        printf("\n");
    }
    return 0;
}