C#の勉強を始めて数日の初心者です。
8個の中から4個を選ぶ組み合わせ
式1
m!
mCn = ――――
n!(m -n)!
式2
m×(m-1)×(m-2)×…×(n+1)
mCn = ――――――――――――
(m-n)!
----------------------------------------------
勉強している本の中で、VBSctiptで式2を下記のような
記述例がありましたが、これをC#で書き換えると
どのようになりますか?
VBScriptの内容は全然分かりません。
メソッドの再帰呼び出し等は使わず、
あくまで、For文のみを使ってC#で記述したいです。
m = CInt(InputBox("何個の中から?"))
n = CInt(InputBox("何個を選びますか?"))
C = 1
For i = m To (n + 1) Step -1
c = c * i
Next
For i = (m - n) To 1 Step -1
c = c / i
Next
MsgBox "組み合わせ = " & CStr(c)
----------------------------------------------
8個の中から4個を選ぶ組み合わせ
自分で書いてみたのですが、上記の式2のVBScriptの例に
のっとった記述方法ではない感じがします。
int m = 8;
int n = 4;
int c = 0;
for (int i = 1; i <= m; i++)
{
c = c * m;// mの階乗を求める
}
for (int i = 1; i <= n; i++)
{
d = d * n;// nの階乗を求める
}
e = d * d;// これの意味がよく分かりません。
f = c / e;
Console.WriteLine(f);// 70
よろしくお願いします。
No.1ベストアンサー
- 回答日時:
★もっとスマートに考えれば良いんじゃないの?
・つまり、8C4の場合は 8 の階乗を mm、4 の階乗を nn とします。
その後に『式1』を使って求めます。→m - n を o に代入します。
・下にそのサンプルを載せます。
サンプル:
int mm = 1, m = 8;
int nn = 1, n = 4;
int oo = 1, o = (m - n);
for ( int i = 1 ; i <= m ; i++ ){ ←8 の階乗
mm *= i;
}
for ( int i = 1 ; i <= n ; i++ ){ ←4 の階乗
nn *= i;
}
for ( int i = 1 ; i <= o ; i++ ){ ←(m - n) の階乗
oo *= i;
}
int ans = (m / (n * o)); ←式1より
Console.WriteLine( ans ); // 70
その他:
・再帰呼び出しを行わないならば、単純にループして階乗を求めればよい。
上記では 8、4、(m -n) の階乗をそれぞれ for 文で計算していますが、関数などにでもして
階乗を簡単に求められるようにすれば良いかもね。階乗の計算結果を戻り値に戻す仕組みで。
・あまり、難しく考えずに人間が考えている方法を C# の文法に則って記述すれば良いだけ。
・以上。参考に。→下の『参考URL』をどうぞ。今後、いろいろと活用できるはずです。
参考URL:http://www.atmarkit.co.jp/fdotnet/csharp_abc2/in …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# C言語 3 2022/10/04 15:07
- その他(プログラミング・Web制作) 十進BASICでの再帰についての質問です。 2 2022/11/18 09:17
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分 1 2022/07/19 17:03
- C言語・C++・C# 至急教えてください。プログラミングの問題です。 malloc関数を使ってください!お願いします! 最 1 2022/07/21 09:28
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# 至急お願いします。プログラミングの問題です。 最初に正の整数nの入力を受け付け、次に分数の分子と分母 3 2022/07/19 17:09
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- Excel(エクセル) VBAで組み合わせ算出やCOUNTIFSの処理を高速化したいです。 4 2022/04/07 02:38
- C言語・C++・C# C言語 3 2022/11/09 13:27
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語での引数の省略方法
-
「指定されたキャストは有効で...
-
#define _CRT_SECURE_NO_WARNIN...
-
ラップ関数とはどんなものですか?
-
複数桁10進数の*桁目だけを抽出...
-
c言語
-
C言語 エラーの原因がわからな...
-
実数の整数部,小数部の取得
-
数字列を3桁ごとにカンマで区切...
-
CでBAモデルを作りたいのですが
-
卒業研究でよく分からないとこ...
-
cinの区切り文字の書き方
-
質問です 下記のコードを分かり...
-
足して100になるような乱数のア...
-
【C++】関数ポインタの使い方
-
構造体の勉強中です 合計点の高...
-
「{ } で囲むだけ」は正しい?
-
式は定数値が必要です」という...
-
c言語の問題です 課題1 (二分探...
-
C言語の配列をC++のvectorに高...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語での引数の省略方法
-
「指定されたキャストは有効で...
-
複数桁10進数の*桁目だけを抽出...
-
ラップ関数とはどんなものですか?
-
【C++】関数ポインタの使い方
-
#define _CRT_SECURE_NO_WARNIN...
-
C言語 エラーの原因がわからな...
-
実数の整数部,小数部の取得
-
system関数がうまくいかない
-
(int *)の意味
-
acceptをalarmでタイムアウトさ...
-
if と配列の組み合わせ
-
C言語初心者です、、、お助けく...
-
std::set<int> で、ある値が何...
-
PowerShellがうまくいかない
-
read関数をノンブロッキングで...
-
ColorをRGBで指定する方法
-
(マルチスレッド)_beginthrea...
-
数字列を3桁ごとにカンマで区切...
-
C言語で分からないところがあり...
おすすめ情報