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 C# (judge verdict: Accepted)

using System;
using System.Collections.Generic;
using System.Linq;

namespace CSharpSample01
{


    class Program
    {

        //change(おつり)
        static int Solve(int change)
        {
            int cnt = 0;

            
            int[] coin = { 500, 100, 50, 10, 5, 1 };

            for(int i = 0; i < coin.Length; i++)
            {
                //coin[i]で限界まで引き続ける
                while(true)
                {
                    if(change - coin[i] >= 0)
                    {
                        change -= coin[i];
                        cnt++;
                    }
                    else
                    {
                        break;
                    }
                }
                //おつりが0になったら終了
                if (change == 0) break;
            }
            
            return cnt;
        }

        static void Main(string[] args)
        {
            while (true)
            {
                int cost = int.Parse(Console.ReadLine());

                if (cost == 0) break;

                Console.WriteLine(Solve(1000 - cost));
            }
            
        }
    }
}