中南复试上机:1003: 最少钱币数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yuehailin/article/details/86704537

1003: 最少钱币数

题目描述

作为A公司的职员,最盼望的日子就是每月的8号了,因为这一天是发工资的日子,养家糊口就靠它了。但是对于公司财务处的工作人员来说,这一天则是很忙碌的一天,财务处的小胡最近就在考虑一个问题:如果每个员工的工资额都知道,最少需要准备多少张人民币,才能在给每位职员发工资的时候都不用老师找零呢?这里假设员工的工资都是正整数,单位元,人民币一共有100元、50元、10元、5元、2元和1元六种。

输入

输入数据包含多个测试实例,每个测试实例的第一行是一个整数n(n<100),表示老师的人数,然后是n个老师的工资(工资<5000)。

输出

每个测试用例输出一行,即凑成钱数值M最少需要的钱币个数。如果凑钱失败,输出“Impossible”。你可以假设,每种待凑钱币的数量是无限多的。

样例输入

3
1 2 3
2
1 2

样例输出

4
2

正确的代码:

#include<stdio.h>
int fun(int mon){
	int count = 0;
	while(mon>0){
	
	if(mon>=100){
		count = count + mon/100;
		mon = mon%100;
		
	}
	if(mon>=50&&mon<100){
		count++;
		mon = mon%50;
		
	}
	if(mon>=10&&mon<50){
		count = count + mon/10;
		mon = mon%10;
		
	}	
	if(mon>=5&&mon<10){
		count = count + mon/5;
		mon = mon%5;
		
	}
	if(mon>=2&&mon<5){
		count = count + mon/2;
		mon = mon%2;
		
	}
	if(mon==1){
		count = count+1;
		mon=0;
		
	}
}
	return count;
	
}
int main(){
	int n;
	while(scanf("%d",&n)!=EOF){
	
	int a[n];
	int i;
	for(i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
	int result = 0;
	for(i=0;i<n;i++){
		result = result + fun(a[i]);
	}
	printf("%d\n",result);
}
} 

猜你喜欢

转载自blog.csdn.net/yuehailin/article/details/86704537