JavaでnCr(組み合わせ)を計算するプログラムの書き方
この記事では、Javaを使ってn個の中からr個を選ぶ組み合わせ(nCr)を計算する方法を詳しく解説します。nCrとは「順序を考慮せずに、n個の要素からr個を選ぶ場合の数」を表すもので、以下の公式で求めることができます。
nCr = n! ÷ (r! × (n−r)!)
ここで「!」は階乗を意味します。例えば 5!(5の階乗)は 5×4×3×2×1 = 120 です。
実行例
入力
入力値が次のとおりだとします。
n の値 : 6 r の値 : 4
出力
期待される出力は次のとおりです。
nCr の値 : 15
実際に計算すると、6C4 = 6! / (4! × 2!) = 720 / (24 × 2) = 15 通りとなり、正しく求められていることがわかります。
アルゴリズム
ステップ1 - 開始する ステップ2 - 整数型の変数 n と r を宣言する ステップ3 - ユーザーから値を読み込む、または値を直接定義する ステップ4 - 階乗を計算する関数と、公式 n!/(r!×(n−r)!) に従ってnCrを計算する関数を定義し、結果を保存する ステップ5 - 結果を表示する ステップ6 - 終了する
例1:ユーザーから入力を受け取る場合
この例では、Scannerクラスを使用して、プロンプトに従ってユーザーが値を入力します。
import java.util.*;
public class Combination {
static int Compute_nCr(int n, int r){
return my_factorial(n) / (my_factorial(r) *
my_factorial(n - r));
}
static int my_factorial(int n){
int i, my_result;
my_result = 1;
for (i = 2; i <= n; i++)
my_result = my_result * i;
return my_result;
}
public static void main(String[] args){
int n,r;
System.out.println("必要なパッケージをインポートしました");
Scanner my_scanner = new Scanner(System.in);
System.out.println("読み込み用オブジェクトを定義しました");
System.out.print("nの値を入力してください : ");
n = my_scanner.nextInt();
System.out.print("rの値を入力してください : ");
r = my_scanner.nextInt();
System.out.println("入力された値に対する組み合わせの値は = " + Compute_nCr(n, r));
}
}
出力
必要なパッケージをインポートしました 読み込み用オブジェクトを定義しました nの値を入力してください : 6 rの値を入力してください : 4 入力された値に対する組み合わせの値は = 15
例2:値を事前に定義して使用する場合
この例では、nとrの値があらかじめ定義されており、その値を取得してコンソールに表示します。
public class Combination {
static int Compute_nCr(int n, int r){
return my_factorial(n) / (my_factorial(r) *
my_factorial(n - r));
}
static int my_factorial(int n){
int i, my_result;
my_result = 1;
for (i = 2; i <= n; i++)
my_result = my_result * i;
return my_result;
}
public static void main(String[] args){
int n,r;
n = 6 ;
r = 4 ;
System.out.println("nとrの値はそれぞれ " + n + " と " + r + " です");
System.out.println("入力された値に対する組み合わせの値は = " + Compute_nCr(n, r));
}
}
出力
nとrの値はそれぞれ 6 と 4 です 入力された値に対する組み合わせの値は = 15
補足:大きな値を扱う際の注意点
階乗は値が急激に大きくなるため、nがある程度大きくなるとint型ではオーバーフローが発生します。より大きな値を正確に扱いたい場合は、long型への変更や、任意精度の整数を扱えるBigIntegerクラスの活用を検討しましょう。
-
正方形の面積を求めるJavaプログラムの書き方【初心者向け解説】
この記事では、Javaを使って正方形の面積を求める方法をわかりやすく解説します。正方形の面積は、次の公式で計算できます。辺 × 辺つまり s2正方形の面積の計算式正方形の1辺の長さを s とすると、その面積は s2(辺の2乗)で表されます。下図のように、縦と横が同じ長さの図形であるため、辺同士を掛け合わせるだけで面積が求まります。入力例1辺の長さ : 4出力例正方形の面積 : 16アルゴリズム処理の流れは以下の手順になります。Step 1 - 開始Step 2 - 整数型の変数 my_side(辺の長さ)と my_area(面積)を宣言するStep 3 - ユーザーから値を読み込む、または値を
-
Javaで回文を判定するプログラムの書き方【数値・文字列の実例付き】
回文(パリンドローム)とは、逆から読んでも同じになる文字列や数値のことです。たとえば、121、313、525 といった数値や、「aba」「wow」のような文字列が回文に該当します。この記事では、Javaを使って回文を判定する方法を、数値の場合と文字列の場合の2つのパターンに分けて、サンプルコードと実行結果とともにわかりやすく解説します。回文数をチェックする方法数値が回文かどうかを判定するには、元の数値を1桁ずつ取り出して逆順に組み立て直し、元の値と比較します。具体的には、剰余演算(%10)で末尾の桁を取り出し、それを結果変数に10倍しながら加算していくことで反転した数値を作れます。サンプルコー