From 8d2007cd9306408de58452b1f55a3e839038fe81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8F=85=E5=8E=9F=20=E5=BA=B7=E6=9A=89?= Date: Mon, 7 Oct 2024 15:43:36 +0900 Subject: [PATCH 1/2] =?UTF-8?q?paiza=E3=81=AE=E5=95=8F=E9=A1=8CB087?= =?UTF-8?q?=E3=81=AE=E5=9B=9E=E7=AD=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ksugawara/.gitignore | 1 + ksugawara/src/HiddenNumber.java | 95 +++++++++++++++++++++++++++++ ksugawara/src/HiddenNumberB087.java | 17 ++++++ 3 files changed, 113 insertions(+) create mode 100644 ksugawara/.gitignore create mode 100644 ksugawara/src/HiddenNumber.java create mode 100644 ksugawara/src/HiddenNumberB087.java diff --git a/ksugawara/.gitignore b/ksugawara/.gitignore new file mode 100644 index 0000000..e10e727 --- /dev/null +++ b/ksugawara/.gitignore @@ -0,0 +1 @@ +/.metadata/ diff --git a/ksugawara/src/HiddenNumber.java b/ksugawara/src/HiddenNumber.java new file mode 100644 index 0000000..60192b0 --- /dev/null +++ b/ksugawara/src/HiddenNumber.java @@ -0,0 +1,95 @@ +package ksugawara; + +import java.util.Scanner; + +/** + * 決められた桁数の上から下、もしくは左から右に並んだ数字の最大値を求めるクラス. + */ + +public class HiddenNumber { + private int maxValue = 0; // 最大値を格納する変数 + private final int height; // マス目の縦の大きさ + private final int width; // マス目の横の大きさ + private final int digits; // 探す数の桁数 + private final int[][] matrix; // マス目に書かれた数字を格納する二次元配列 + private final int mantissa = 10; // 最大値を求める計算上で使う仮数部の値 + + /** + * コンストラクト. + */ + + public HiddenNumber() { + final Scanner sc = new Scanner(System.in); + this.height = sc.nextInt(); + this.width = sc.nextInt(); + this.digits = sc.nextInt(); + final String[] stringArray = new String[height]; + this.matrix = new int[height][width]; + + // 標準入力された二次元配列を一度文字列として一次元配列に格納する + for (int j = 0; j < height; j++) { + stringArray[j] = sc.next(); + } + + sc.close(); + + // 先ほどの文字列型の一次元配列を整数型で二次元配列に格納する + for (int row = 0; row < height; row++) { + for (int col = 0; col < width; col++) { + matrix[row][col] = Character.getNumericValue(stringArray[row].charAt(col)); + } + } + } + + // 横に並んだ数の最大値と縦に並んだ数の最大値の大きい方が整数型の値として返される関数。 + int getMaxValue() { + horizontalMaxValue(); + verticalMaxValue(); + return maxValue; + } + + // 横に並んだ数の最大値を求める関数 + void horizontalMaxValue() { + for (int row = 0; row < height; row++) { + for (int col = 0; col < width - digits + 1; col++) { + horizontalUnion(row, col); + } + } + } + + // 1234なら、1*1000+2*100+3*10+4*1と計算して、もし最大値を更新した場合、maxValueの値を上書きする関数 + void horizontalUnion(final int row, final int col) { + int sum = 0; + for (int i = 0; i < digits; i++) { + sum += matrix[row][col + i] * Math.pow(mantissa, digits - i - 1); + } + + // これまでの最大値より高い値の場合更新する。 + if (maxValue < sum) { + maxValue = sum; + } + } + + // 縦に並んだ数の最大値を求める関数 + void verticalMaxValue() { + for (int col = 0; col < width; col++) { + for (int row = 0; row < height - digits + 1; row++) { + verticalUnion(col, row); + + } + } + } + + // 1\n2\n3\n4なら、1*1000+2*100+3*10+4*1のように計算する関数 + void verticalUnion(final int col, final int row) { + int sum = 0; + for (int i = 0; i < digits; i++) { + sum += matrix[row + i][col] * Math.pow(mantissa, digits - i - 1); + } + + // これまでの最大値より高い値の場合更新する。 + if (maxValue < sum) { + maxValue = sum; + } + } +} diff --git a/ksugawara/src/HiddenNumberB087.java b/ksugawara/src/HiddenNumberB087.java new file mode 100644 index 0000000..a8bbb09 --- /dev/null +++ b/ksugawara/src/HiddenNumberB087.java @@ -0,0 +1,17 @@ +package ksugawara; + +/** + * ksugawara 「B087隠された数」の回答プログラムのクラス. + */ + +public class HiddenNumberB087 { + + /** + * 与えられた条件を基に最大値を求めるプログラム. + */ + public static void main(final String[] args) { + final HiddenNumber hid = new HiddenNumber(); + final int maxValue = hid.getMaxValue(); + System.out.println(maxValue); + } +} -- GitLab From 43bb2d881eaf0059f73c981a637d9ae19daf0d34 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=8F=85=E5=8E=9F=20=E5=BA=B7=E6=9A=89?= Date: Wed, 9 Oct 2024 18:27:12 +0900 Subject: [PATCH 2/2] =?UTF-8?q?paiza=E3=81=AE=E5=95=8F=E9=A1=8CB087?= =?UTF-8?q?=E3=81=AE=E8=AA=B2=E9=A1=8C=E3=82=92=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ksugawara/src/HiddenNumber.java | 19 +++++++++---------- ksugawara/src/HiddenNumberB087.java | 5 +++-- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/ksugawara/src/HiddenNumber.java b/ksugawara/src/HiddenNumber.java index 60192b0..d7514cd 100644 --- a/ksugawara/src/HiddenNumber.java +++ b/ksugawara/src/HiddenNumber.java @@ -7,18 +7,17 @@ import java.util.Scanner; */ public class HiddenNumber { + private static final int BASE_NUM = 10; // 最大値を求める計算上で使う基数の値 private int maxValue = 0; // 最大値を格納する変数 - private final int height; // マス目の縦の大きさ - private final int width; // マス目の横の大きさ - private final int digits; // 探す数の桁数 - private final int[][] matrix; // マス目に書かれた数字を格納する二次元配列 - private final int mantissa = 10; // 最大値を求める計算上で使う仮数部の値 + private int height; // マス目の縦の大きさ + private int width; // マス目の横の大きさ + private int digits; // 探す数の桁数 + private int[][] matrix; // マス目に書かれた数字を格納する二次元配列 /** - * コンストラクト. + * 標準入力された値を変数や配列に格納する関数. */ - - public HiddenNumber() { + public void storeInputValues() { final Scanner sc = new Scanner(System.in); this.height = sc.nextInt(); this.width = sc.nextInt(); @@ -61,7 +60,7 @@ public class HiddenNumber { void horizontalUnion(final int row, final int col) { int sum = 0; for (int i = 0; i < digits; i++) { - sum += matrix[row][col + i] * Math.pow(mantissa, digits - i - 1); + sum += matrix[row][col + i] * Math.pow(BASE_NUM, digits - i - 1); } // これまでの最大値より高い値の場合更新する。 @@ -84,7 +83,7 @@ public class HiddenNumber { void verticalUnion(final int col, final int row) { int sum = 0; for (int i = 0; i < digits; i++) { - sum += matrix[row + i][col] * Math.pow(mantissa, digits - i - 1); + sum += matrix[row + i][col] * Math.pow(BASE_NUM, digits - i - 1); } // これまでの最大値より高い値の場合更新する。 diff --git a/ksugawara/src/HiddenNumberB087.java b/ksugawara/src/HiddenNumberB087.java index a8bbb09..944cff0 100644 --- a/ksugawara/src/HiddenNumberB087.java +++ b/ksugawara/src/HiddenNumberB087.java @@ -10,8 +10,9 @@ public class HiddenNumberB087 { * 与えられた条件を基に最大値を求めるプログラム. */ public static void main(final String[] args) { - final HiddenNumber hid = new HiddenNumber(); - final int maxValue = hid.getMaxValue(); + final HiddenNumber hiddenNumber = new HiddenNumber(); + hiddenNumber.storeInputValues(); + final int maxValue = hiddenNumber.getMaxValue(); System.out.println(maxValue); } } -- GitLab