伯準15489パスカル三角形解題(JAVA)
15806 ワード
質問リンク
パスカル三角形は次のような形で構成されている.両端を除いて、各数は自分の正左上隅数と正右上隅数の和から構成されています.
このとき、R行目、C 2番目の数を頂点とする一方の辺に含まれる数Wの正三角形およびその内部を考える.正三角形の辺とその内部の数の和を求めたい.例えば、3行目、1番目の数を頂点とし、1辺に含まれる数4の正三角形とその内部の数の和は、1+(1+3)+(1+4+6)+(1+5+10+10)=42である.
与えられたR,C,Wに対して対応する加算プログラムを記述する.
1行目の正の整数R,C,Wはそれぞれ1つのスペースを残し,順次与えられる.(但し、2≦R+W≦30、2≦C+W≦30、1≦W≦29、C≦R)
第1行目には、R、Cを頂点とする1辺に含まれる数Wの正三角形とその内部の数の和が出力される.
パスカル三角形を作り始めたばかりです.
そして、三角形の辺長がnの場合、三角形の高さがnの点を利用して、三角形の頂点を基準として、範囲内の数の総和を出力する.
質問する
パスカル三角形は次のような形で構成されている.両端を除いて、各数は自分の正左上隅数と正右上隅数の和から構成されています.
このとき、R行目、C 2番目の数を頂点とする一方の辺に含まれる数Wの正三角形およびその内部を考える.正三角形の辺とその内部の数の和を求めたい.例えば、3行目、1番目の数を頂点とし、1辺に含まれる数4の正三角形とその内部の数の和は、1+(1+3)+(1+4+6)+(1+5+10+10)=42である.
与えられたR,C,Wに対して対応する加算プログラムを記述する.
入力
1行目の正の整数R,C,Wはそれぞれ1つのスペースを残し,順次与えられる.(但し、2≦R+W≦30、2≦C+W≦30、1≦W≦29、C≦R)
しゅつりょく
第1行目には、R、Cを頂点とする1辺に含まれる数Wの正三角形とその内部の数の和が出力される.
に答える
パスカル三角形を作り始めたばかりです.
for (int i = 1; i < 30; i++) {
for (int j = 0; j < i + 1; j++) {
if (j == 0 || j == i) {
pascal[i][j] = 1;
continue;
}
pascal[i][j] = pascal[i - 1][j - 1] + pascal[i - 1][j];
}
}
三角形の最上位は1で埋め、最上位でなければ自分より上の行に、自分の列数に等しい列数+1格の数を加算します.そして、三角形の辺長がnの場合、三角形の高さがnの点を利用して、三角形の頂点を基準として、範囲内の数の総和を出力する.
ソースコード
import java.math.BigInteger;
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
int pascal[][] = new int[30][30];
pascal[0][0] = 1;
for (int i = 1; i < 30; i++) {
for (int j = 0; j < i + 1; j++) {
if (j == 0 || j == i) {
pascal[i][j] = 1;
continue;
}
pascal[i][j] = pascal[i - 1][j - 1] + pascal[i - 1][j];
}
}
StringTokenizer st = new StringTokenizer(br.readLine());
final int TOP_POINT_COL = Integer.parseInt(st.nextToken());
final int TOP_POINT_ROW = Integer.parseInt(st.nextToken());
final int TRI_SIDE_COUNT = Integer.parseInt(st.nextToken());
int triGrade = 1;
int addTotal = 0;
for (int i = TOP_POINT_COL; i < TOP_POINT_COL + TRI_SIDE_COUNT; i++) {
for (int j = TOP_POINT_ROW; j < TOP_POINT_ROW + triGrade; j++) {
addTotal += pascal[i-1][j-1];
}
triGrade++;
}
sb.append(addTotal);
sb.append("\n");
bw.write(sb.toString());
bw.flush();
br.close();
bw.close();
}
}
Reference
この問題について(伯準15489パスカル三角形解題(JAVA)), 我々は、より多くの情報をここで見つけました https://velog.io/@phjppo0918/백준-15489-파스칼-삼각형-문제풀이-JAVAテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol