3桁(1円~999円)までの支払いで、硬貨の最小の枚数を求めるプログラムを作成しています。
考え方としては、下記のようにしようと思っています。
1円硬貨を使わない場合、
1円と5円硬貨を使わない場合、
1円と5円と10円硬貨を使わない場合、
1円と5円と10円と50円硬貨を使わない場合、
1円と5円と10円と50円と100円硬貨を使わない場合、
全ての硬貨を使う場合。
うまくいく時といかないときがあり、その違いがわかりません。
お教えいただけたら、幸いです。
javaを勉強し始めて、2週間ほどなのでわかりやすくお教えいただけたら助かります。
よろしくお願いいたします。
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(System.in);
int price = sc.nextInt();
int price_1,price_2,change,upper_price;
int[] type = {500, 100, 50, 10, 5, 1}; int[] count = { 0, 0, 0, 0, 0, 0 }; int min = 0;//お釣りの最小枚数を入れる(最初はパターン1の値を入れて比べていく) int total_count = 0;//使用硬貨の合計枚数 int len = len = type.length - 1; int total_change_count = 0;//お釣りの硬貨枚数 int[] change_count = { 0, 0, 0, 0, 0, 0 };//お釣りの硬貨枚数用 price_1 = price;//お釣りのないパターン for(int i = 0; i < type.length;i++){ count[i] = price_1 / type[i]; price_1 %= type[i]; total_count += count[i]; } min = total_count;//minをお釣りのない硬貨の枚数で初期化 //お釣りありのパターン for(int i = 1; i < type.length; i++){ price_2 = price % type[len - i];//入力値を5で割った余り change = type[len - i] - price_2;//5-↑の余り値 upper_price = price + change;//お釣り込みの値段=1の位が0 total_count = 0;//total_countは何度も使うので0に初期化 total_change_count = 0;//total_change_countは何度も使うので0に初期化 System.out.println("change = " + change); //お釣りの硬貨枚数計算 for(int k = 0 ;k < type.length;k++){ change_count[k] = change / type[k]; change %= type[k]; total_change_count += change_count[k]; } System.out.println("total_change_count = " + total_change_count); for(int j = 0; j < (type.length - i); j++){ count[j] = upper_price / type[j]; upper_price %= type[j]; total_count += count[j]; } total_count += total_change_count; System.out.println("totalCount = " + total_count); if(min > total_count){ min = total_count; } } System.out.println(min);
}
}
回答2件
あなたの回答
tips
プレビュー