Problem:
おつり

問題

太郎君はよくJOI雑貨店で買い物をする． JOI雑貨店には硬貨は500円，100円，50円，10円，5円，1円が十分な数だけあり，いつも最も枚数が少なくなるようなおつりの支払い方をする．太郎君がJOI雑貨店で買い物をしてレジで1000円札を1枚出した時，もらうおつりに含まれる硬貨の枚数を求めるプログラムを作成せよ．

例えば入力例1の場合は下の図に示すように，4を出力しなければならない．

入力

入力は複数のデータセットからなる．各データセットは1行からなり，太郎君が支払う金額（1以上1000未満の整数）が1つだけ書かれている．入力データはゼロ１つの行で終了する．

データセットの数は 5 を超えない．

出力

データセットごとにおつりに含まれる硬貨の枚数を1行に出力せよ．

入出力例

入力例

380
1
0

出力例

4
15

上記問題文と自動審判に使われるデータは、情報オリンピック日本委員会が作成し公開している問題文と採点用テストデータです。

Solution in JAVA (judge verdict: Accepted)

import java.util.Scanner;

class Main{
	static int change = 0;//お釣り
	public static void main(String[] args){
		Scanner stdIn = new Scanner(System.in);
		int paymentAmont = 1000;//支払い金額
		
		while(true){
			int amountShopping = stdIn.nextInt();//買い物金額
			if(amountShopping == 0)break;
			change = paymentAmont - amountShopping;
	
			int coin500 = getCoinNumberOfSheets(500);//釣りの500円玉の枚数
			int coin100 = getCoinNumberOfSheets(100);//釣りの100円玉の枚数
			int coin50 = getCoinNumberOfSheets(50);//釣りの50円玉の枚数
			int coin10 = getCoinNumberOfSheets(10);//釣りの10円玉の枚数
			int coin5 = getCoinNumberOfSheets(5);//釣りの5円玉の枚数
			int coin1 = getCoinNumberOfSheets(1);//釣りの1円玉の枚数
			
			System.out.println(coin500+coin100+coin50+coin10+coin5+coin1);
		}
	}
	public static int getCoinNumberOfSheets(int kindOfCoin){
		int countCoin = 0;
		while(change >= kindOfCoin){
			change -= kindOfCoin;
			countCoin++;
		}
		return countCoin;
	}
}