Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaでパスカルの三角形を出力するプログラムの作り方

この記事では、Javaを使ってパスカルの三角形をコンソールに出力する方法を解説します。パスカルの三角形は、複数のfor文(ループ)とprint文を組み合わせることで形成されます。三角形の外側にあるすべての値はゼロ(0)として扱われ、実際には表示されません。

パスカルの三角形は二項係数(組み合わせの数)を三角形状に並べたものであり、各行は上の行の隣り合う2つの数を足し合わせることで求められます。最初の行は「0 1 0」ですが、実際にスペースを占めるのは1だけで、0は不可視です。次の行は(0+1)と(1+0)を計算することで得られ、出力は両側を0で挟まれた形になります。この処理を必要な段数に達するまで繰り返します。

以下に具体例を示します。

入力と出力の例

入力

ユーザーから次のような入力を受け取るとします。

パスカルの三角形の行数を入力してください : 8

出力

期待される出力は以下の通りです。

パスカルの三角形の行数を入力してください : 8
パスカルの三角形 :
        1
       1 1
      1 2 1
     1 3 3 1
    1 4 6 4 1
   1 5 10 10 5 1
  1 6 15 20 15 6 1
 1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1

アルゴリズム

ステップ1 - 開始
ステップ2 - 整数型の変数 i、j、my_input を宣言する
ステップ3 - ユーザーから必要な値を読み込む/値を定義する
ステップ4 - 2つの数の階乗を計算する関数「factorial()」と、2つの数の組み合わせを計算する関数「combination()」を定義する
ステップ5 - 二重のfor文を使って反復処理を行い、文字間の空白を作る
ステップ6 - 最も内側のループを抜けたら、別のfor文で反復処理を行い、i と j の組み合わせ(Combination)の値を取得する
ステップ7 - 改行を出力して、次の行以降にも i と j の組み合わせの値を所定の個数だけ表示できるようにする
ステップ8 - 結果を表示する
ステップ9 - 終了

サンプル1:ユーザーからの入力を受け取る場合

この例では、プロンプトに基づいてユーザーが入力した値を使用します。オンラインの実行環境でも動作を確認できます。

import java.util.Scanner;
public class PascalsTriangle {
   static int factorial(int my_input) {
      int factors;
      for(factors = 1; my_input > 1; my_input--){
         factors *= my_input;
      }
      return factors;
   }
   static int combination(int my_input,int r) {
      return factorial(my_input) / ( factorial(my_input-r) * factorial(r) );
   }
   public static void main(String args[]){
      System.out.println();
      int my_input, i, j;
      my_input = 5;
      System.out.println("必要なパッケージがインポートされました");
      Scanner my_scanner = new Scanner(System.in);
      System.out.println("Scannerオブジェクトが定義されました");
      System.out.print("パスカルの三角形の行数を入力してください : ");
      my_input = my_scanner.nextInt();
      System.out.println("パスカルの三角形 :");
      for(i = 0; i <= my_input; i++) {
         for(j = 0; j <= my_input-i; j++){
            System.out.print(" ");
         }
         for(j = 0; j <= i; j++){
            System.out.print(" "+combination(i, j));
         }
         System.out.println();
      }
   }
}

出力

必要なパッケージがインポートされました
Scannerオブジェクトが定義されました
パスカルの三角形の行数を入力してください : 8
パスカルの三角形 :
        1
       1 1
      1 2 1
     1 3 3 1
    1 4 6 4 1
   1 5 10 10 5 1
  1 6 15 20 15 6 1
 1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1

サンプル2:値を事前に定義しておく場合

この例では、整数値があらかじめ定義されており、その値を読み取ってコンソールに表示します。ユーザー入力が不要なため、処理の流れをシンプルに確認したい場合に便利です。

public class PascalsTriangle {
   static int factorial(int my_input) {
      int factors;
      for(factors = 1; my_input > 1; my_input--){
         factors *= my_input;
      }
      return factors;
   }
   static int combination(int my_input,int r) {
      return factorial(my_input) / ( factorial(my_input-r) * factorial(r) );
   }
   public static void main(String args[]){
      System.out.println();
      int my_input, i, j;
      my_input = 8;
      System.out.println("パスカルの三角形の行数は " +my_input+ " に設定されています");
      System.out.println("パスカルの三角形 :");
      for(i = 0; i <= my_input; i++) {
         for(j = 0; j <= my_input-i; j++){
            System.out.print(" ");
         }
         for(j = 0; j <= i; j++){
            System.out.print(" "+combination(i, j));
         }
         System.out.println();
      }
   }
}

出力

パスカルの三角形の行数は 8 に設定されています
パスカルの三角形 :
        1
       1 1
      1 2 1
     1 3 3 1
    1 4 6 4 1
   1 5 10 10 5 1
  1 6 15 20 15 6 1
 1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1

このように、階乗を求める関数と組み合わせを求める関数を用意し、ネストしたfor文で空白と数値を出力していくことで、任意の段数のパスカルの三角形を簡単に表示できます。

  1. Javaで整数を出力するプログラムの書き方|Scannerを使った入力方法も解説

    この記事では、Javaで整数を出力する方法をわかりやすく解説します。整数の取り扱いには「int型」を使用します。int型は32ビットの符号付き2の補数で表現される整数型で、扱える値の範囲は最小値が-2,147,483,648(-2^31)、最大値が2,147,483,647(2^31-1)です。int型は、メモリ使用量に特別な懸念がない限り、整数値のデフォルトのデータ型として広く利用されています。宣言のみの場合の初期値は0です。入力と出力のイメージたとえば、ユーザーが「45」という整数を入力すると、プログラムは次のように出力します。Enter an integer: 45期待される出力:The

  2. Javaで行列をZ字形に出力するプログラムの書き方

    行列(マトリックス)を「Z」の字形に沿って出力するには、1行目を左から右へ → 右端から左下への対角要素 → 最終行を左から右へ の順に要素を表示していきます。本記事では、その処理を実現するJavaプログラムをサンプルコードとともに解説します。 サンプルコード import java.lang.*; import java.io.*; public class Demo{ public static void z_shape(int my_arr[][], int n){ int i = 0, j, k; // 1行目を左から右へ出力 f