while True:

問題6

10000 円札,5000 円札,2000 円札,1000 円札,500 円硬貨,100 円硬貨,50 円硬貨,10 円硬貨,5 円硬貨,1 円硬貨のそれぞれが十分に用意されているとき, 23751 円をもっとも少ない数の通貨で支払うには,10000 円札 2 枚,2000 円札 1 枚,1000 円札 1 枚,500 円硬貨 1 個, 100 円硬貨 2 個,50 円硬貨 1 個,1 円硬貨 1 個を出せばよい.支払い額を読み込み,その額を もっとも少ない数の通貨で支払うにはどうすればよいかを教えるプログラムを作れ.

難易度 ★☆☆☆☆

基本的な問題です。割り切りを使用することでいくつ出せばいいかを知ることができます。数の大きい順にいくつ出せばいいかを計算し、出せる場合はその数を引くことで次の数に引き渡すことができます。 FORTRANでは整数型同士を割り算すると小数点割り切りの整数型で返します。今回の問題では配列DOを使用するのがよいでしょう。
program question6
	implicit none
	integer :: money, i, val
	integer :: a(10) = (/ 10000, 5000, 2000, 1000, 500, 100, 50, 10, 5, 1 /)

	print *, "Input money: "
	read *, money
	
	do i = 1, 10
		val = money / a(i)
		print *, a(i), "yen:", val
		money = money - val * a(i)
	end do

end program question6
ページのトップへ戻る