4問目です。
JAVAのクラスの継承とかいうのを勉強したので
無理やりそれを使ってプログラミングしてみました。
アルゴリズムは比較的簡単だったけど、
継承とコンストラクタを使ってみようと余計なことを
して時間がかかった。
結局コンストラクタは断念。
この当時は記述に必死だったな。
とにかく動いた!!
みたいな・・・
クラスファイルは5個に分かれてますが、
一つにまとめて載せます
2018年8月27日作
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 |
//複数の競技者に一枚100ゴールドで投票 //優勝した人にかけてた場合一定額を控除した残金からかけた人に配当 // 1 ≦ N ≦ 100, 1 ≦ M ≦ N, 0 ≦ P ≦ 100, 0 ≦ Xi ≦ 1000 public class PrinceccGamble { public static void main(String[] args) { int return_haitou; //計算後の回答戻り値 int[] haitou_array = new int[10]; // 回答用配列 int i = 0; //ループ変数 boolean end_flg = false; //ループ終了フラグ Inp inp = new Inp(); // 入力 High_Calc h_calc = new High_Calc(); // 計算 Printing printing = new Printing(); // 出力 // 入力が0 0 0 で終了 while (end_flg == false) { String str = inp.InputData(); if (str.equals("0 0 0")) { end_flg = true; //000の入力で終了 break; } else { return_haitou = h_calc.H_Calc(inp.getPlayerNo(), inp.getWinnerNo(), inp.getDRate(), inp.getX()); haitou_array[i] = return_haitou; i++; } } printing.Prin(haitou_array, i); } } ////////////////////////////////////// import java.util.Scanner; public class Inp { private int playerNo = 0; // 競技者数 private int winnerNo = 0;// 優勝者番号 private int dRate = 0;// 控除率 private int[] x = new int[1000]; // 各競技者に賭けられた投票券数 private String[] str_line = new String[3]; // scanner配列 public String InputData() { Scanner scan = new Scanner(System.in); System.out.println("競技者数- 勝者番号-控除率");//入力案内1 String str = scan.nextLine(); str_line = str.split(" "); playerNo = Integer.parseInt(str_line[0]); winnerNo = Integer.parseInt(str_line[1]); dRate = Integer.parseInt(str_line[2]); for (int i = 0; i < playerNo; i++) { System.out.println(i + 1 + "人目に何枚賭けた?");//入力案内2 x[i] = scan.nextInt(); } if (str == "0 0 0") { scan.close(); } return str; } /* * 競技者数を取得 */ public int getPlayerNo() { return this.playerNo; } /* * 優勝者番号を取得 */ public int getWinnerNo() { return this.winnerNo; } /* * 控除率(%)を取得 */ public int getDRate() { return this.dRate; } /* * 各投票数を取得 */ public int[] getX() { return this.x; } } ///////////////////////////////////////////////////////// //継承の勉強用親クラス public class Basic_Calc { /* ** 投票額の合計数を計算 */ private int kakekin = 100; // 投票券1枚の金額 int goukei = 0; public void B_Calc(int playerNo, int[] x) { for (int i = 0; i < playerNo; i++) { goukei = goukei + x[i] * kakekin; } } } //////////////////////////////////////////// //継承の勉強用子クラス public class High_Calc extends Basic_Calc { /* * 親クラスBasic_Calcの継承 * @param playerNo, winnerNo, dRate, x[] */ private int haitou = 0; // 親クラスで計算したgoukeiから控除して、賭けられた投票券数で割って配当金を計算する public int H_Calc(int playerNo, int winnerNo, int dRate, int[] x) { super.B_Calc(playerNo, x); // 控除額を引く haitou = super.goukei - super.goukei * dRate / 100; int win_no = winnerNo - 1; //優勝者の要素番号 int nanmai = x[win_no]; //優勝者の投票券数 // 一枚あたりの配当金を計算 if (nanmai == 0) { haitou = 0; //誰もかけてなかったら0 } else { haitou = haitou / nanmai; } return haitou; } /* * 配当金額を取得 */ public int getHaitou() { return this.haitou; } } //////////////////////////////////////////// public class Printing { /** * コンソール出力 * * @param haitou ,end_i */ public void Prin(int[] hait, int end_i) { for (int i = 0; i < end_i; i++) { System.out.println(hait[i]); } } } |