3219 - 第二届校赛样题-中等题样例

通过次数

0

提交次数

0

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

    作为ACM协会的成员,最盼望的日子就是网络赛左右的几天。今年山建ACM队进入了区域赛,于是刘老师想给每个队员发一笔奖金。
    刘老师最近就在考虑一个问题:如果每个同学的奖金额都知道,最少需要准备多少张人民币,才能在给每位同学发奖金的时候都不用老师找零呢?

<span style="font-family:'Times New Roman';font-size:14px;line-height:normal;">&nbsp; &nbsp; 这里假设同学的奖金都是正整数,单位元,人民币一共有100元、50元、20元、10元、5元和1元六种。</span>

<span style="font-family:'Times New Roman';font-size:14px;line-height:normal;">(题目来源:2009 HDU 新生选拔赛)</span>

题目输入

第一行为正整数T,输入数据包含T个测试实例。

每个测试实例的第一行是一个整数n(n<100),表示同学的人数,然后是n个同学的奖金。


题目输出

对于每个测试实例输出一个整数x,表示至少需要准备的人民币张数。每个输出占一行。

输入/输出样例

输入格式

2
3
1 2 3
2
500 500

输出格式

6
10

C语言解答

#include<stdio.h>
int main()
{int a;scanf("%d",&a);
while(a--){
int s,b,p=0;scanf("%d",&b);
while(b--){
int c,d,e,f,g,h,i;
scanf("%d",&c);{
d=c/100;e=c%100/50;
f=c%50/20;g=c%50%20/10;
h=c%10/5;i=c%5;
s=d+e+f+g+h+i;p=p+s;}
}printf("%d\n",p);
}
}

C++解答

#include <iostream>
#include <algorithm>
#include <cmath>
#include <fstream>
using namespace std;

int getnumofmoney(int n)
{
    int r=0;
    while(n!=0)
    {
        if(n>=100)
        {
            n-=100;
            r++;
            continue;
        }
        if(n>=50)
        {
            n-=50;
            r++;
            continue;
        }
        if(n>=20)
        {
            n-=20;
            r++;
            continue;
        }
        if(n>=10)
        {
            n-=10;
            r++;
            continue;
        }
        if(n>=5)
        {
            n-=5;
            r++;
            continue;
        }
        if(n>=1)
        {
            n-=1;
            r++;
            continue;
        }

    }
    return r;
}


int main()
{

    //ifstream cin;
    //ofstream cout;
    //cin.open("b.in");
    //cout.open("b.out");

    int tc,testcase;
    cin>>tc;

    while(tc--)
    {
        cin>>testcase;
        int p[105];
    for(int i=0;i<testcase;i++)
            cin>>p[i];
    int total=0;
    for(int i=0;i<testcase;i++)
    {
        total+=getnumofmoney(p[i]);
    }
    cout<<total<<endl;
    }
    return 0;
}

Java解答

import java.util.Scanner;
class Main {

	private static final int[] m = { 100, 50, 20, 10, 5, 1 };

	public static void main(String[] args) {
		Scanner reader = new Scanner(System.in);
		int T = reader.nextInt();
		for (int i = 0; i < T; i++) {
			int sum = 0;
			int first = reader.nextInt();
			for (int j = 0; j < first; j++) {
				int money = reader.nextInt();
				sum = sum + giveChange(money);
			}
			System.out.println(sum);
		}

	}
	public static int giveChange(int n) {
		int num = 0;
		for (int i = 0; i < m.length; i++) {
			num += n / m[i];
			n = n % m[i];
		}
		return num;
	}
}