

**Javaで複数の商品をまとめ買い値引きありで買うプログラムを完成させたいです。**

標準入力の値から標準出力するプログラムなのですが、苦戦しています。お力を貸していただけないでしょうか？

* * *

**課題としては以下です。**

商品は N 種類となっています。このキャンペーンでは、1 個あたり p_i 円の商品 i を s_i 個まとめて買うと、支払い金額から d_i
円値引きします。K 個の購入情報 (購入した商品の番号 c_j と数量 a_j) が与えられるので、それぞれの割引後の支払金額を求めてください。

例えば、商品１（りんご）単価２０円・５個で１０円引き、商品２（ピーマン）単価４５円・６個で４０円引き。

購入内容が以下なら支払金額は以下のように求められます。

商品 1 を 6 個購入  
→ 6 ÷ 5 = 1 あまり 1 なので割引が 1 回適用でき、支払いは 20 x 6 - 10 x 1 = 110 円

商品 2 を 12 個購入  
→ 12 ÷ 6 = 2 なので割引が 2 回適用でき、支払いは 45 x 12 - 40 x 2 = 460 円

**標準入力の値は以下です。**

入力は標準入力にて以下のフォーマットで与えられます。

[code]

    N
    p_1 s_1 d_1
    p_2 s_2 d_2
    ...
    p_N s_N d_N
    M
    c_1 a_1
    c_2 a_2
    ...
    c_M a_M
    
[/code]

・1 行目には、キャンペーン対象となる商品の種類の総数を表す整数 N が与えられます。  
・続く N 行のうちの i 行目 (1 ≦ i ≦ N) には、商品 i の単価を表す整数 p_i と、キャンペーンの詳細を表す 2 つの整数 s_i,
d_i がこの順に半角スペース区切りで与えられます。  
・これは、商品 i を s_i 個まとめて買うと d_i 円値引きする、ということを表します。  
・続く行には、入力される購入内容の総数を表す整数 M が与えられます。  
・続く M 行の中の j 行目 (1 ≦ j ≦ M) には、購入された商品の番号を表す整数 c_j、その商品の購入数を表す整数 a_j
がこの順に半角スペース区切りで与えられます。  
・入力は合計で N + M + 2 行となり、入力値最終行の末尾に改行が 1 つ入ります。

**入力例１**  
入力

[code]

    2
    20 5 10
    45 6 40
    2
    1 6
    2 12
    
[/code]

出力

[code]

    110
    460
    
[/code]

**入力例２**  
入力

[code]

    4
    30 2 10
    55 5 40
    100 1 2
    25 10 25
    6
    1 1
    2 1
    3 3
    1 3
    2 9
    4 52
    
[/code]

出力

[code]

    30
    55
    294
    80
    455
    1175
    
[/code]

私自身で途中まで実装したコードです。やったこととして示している部分もあるので、コードは活用していただかなくて結構です。

[code]

    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;
    
    public class kiesan {
    
        public static void main(String[] args) {
    
            Scanner sc = new Scanner(System.in);
            List<String> list = new ArrayList<String>();
            while (sc.hasNextLine()) {
                String str = sc.nextLine();
                list.add(str);
            }
    
            List<String> priceList = new ArrayList<String>();
            for (int i = 1; i <= Integer.valueOf(list.get(0)); i++) {
                String s = list.get(i);
                priceList.add(s);
            }
    
            for (int i = 4; i < (i + Integer.valueOf(list.get(3))); i++) {
                String s = list.get(i);
                // ここまでしかできませんでした。
            }
    
        }
    
    }
    
[/code]

入力例１や２のような結果になるプログラムを実装したいです。


CC BY-SA 4.0
2020-05-27T14:31:39.717
67047
2020-05-27T16:41:06.097
40357
question
java
複数の商品をまとめ買い値引きありで買うプログラムを完成させたい

[code]

    import java.util.*;
    
    public class Main {
        public static void main(String[] args) {
    
            Scanner sc = new Scanner(System.in);
            int n = Integer.parseInt(sc.next());
            int[] p = new int[n];
            int[] s = new int[n];
            int[] d = new int[n];
    
            for(int i=0; i<n; i++){
                p[i] = Integer.parseInt(sc.next());
                s[i] = Integer.parseInt(sc.next());
                d[i] = Integer.parseInt(sc.next());
            }
    
            int m = Integer.parseInt(sc.next());
    
            for(int i=0; i<m; i++){
                int c = Integer.parseInt(sc.next()) -1;
                int a = Integer.parseInt(sc.next());
                System.out.println(a*p[c] - (a/s[c])*d[c]);
            }
        }
    }
    
[/code]


CC BY-SA 4.0
2020-05-27T16:41:06.097
67050
2020-05-27T16:41:06.097
40231
67047
answer