質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

1244閲覧

C# 総当たりパターン2

arpana

総合スコア13

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2017/11/23 03:42

編集2017/11/23 13:22

変数size(整数値)の総当りパターンを表示するプログラムを作成中です。
整数を表示させる部分で詰まっています。
どの行に表示処理を挿入すれば上手く表示されるでしょうか。

先日、配列を用いたソースコードで似た質問をしていますが、
配列を使わないで処理を行いたいからです。

よろしくお願いいたします。

C#

1using System; 2 3class Sample 4{ 5 static int size = 3; 6 7 public static void Main() 8 { 9 Calc(0); 10 } 11 12 static void Calc(int n) 13 { 14 for(int y = 1; y <= size; y++) 15 { 16 if (size <= n) 17 { 18 Console.WriteLine(); 19 break; 20 } 21 Calc(n + 1); 22 } 23 } 24}

【処理結果】
1 1 1
1 1 2
1 1 3
1 2 1
1 2 2
1 2 3
1 3 1
1 3 2
1 3 3
2 1 1
2 1 2
2 1 3
2 2 1
2 2 2
2 2 3
2 3 1
2 3 2
2 3 3
3 1 1
3 1 2
3 1 3
3 2 1
3 2 2
3 2 3
3 3 1
3 3 2
3 3 3

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Chironian

2017/11/23 06:40

https://teratail.com/questions/101518 のソースでうまくいくのでしたら、それで良いのでは? それではダメな理由があるならば、その理由を提示した方が回答は付きやすいと思いますよ。
arpana

2017/11/23 13:23

Chironianさん ご指摘ありがとうございます。補足を追加いたしました。
guest

回答2

0

ベストアンサー

Chironianさん回答を拝見し「全てを書いてしまうと勉強の機会を奪うことになる」ということに同意なので、コードの外枠のみとし、肝心な部分は省略させていただきました。穴埋め問題みたいですが考える練習になりそうな気がします。

(1) 再帰
提示されている制御のままで、表示のみしか追加できないとすると自分には無理です。この制御(再帰呼び出し)をなるべく残し、引数に文字列(事実上それは配列を使うのとほぼ同じと言えますが)なら次のように書けます。

C#

1class Sample1 { 2 static void Test() { 3 int n = 3; 4 iterate(n, 0, ""); 5 } 6 7 static void Calc(int n, int i, String s) { 8 if (i >= n) { 9 Console.WriteLine(s); 10 } else { 11 省略(一重ループと再帰呼び出しが入ります) 12 } 13 } 14}

(2) 二重ループ
これはN進数でN桁で表現できる全ての整数を列挙するのと同じ意味ですので、「N^N-1 <= intの最大値」という条件を付けるなら(ご質問の再帰呼び出しの制御は全く使わないことになりますが)次のようにも書けます。

C#

1class Sample2 { 2 static void Test() { 3 int n = 3; 4 5 var n2 = n * n; 6 for (var i = 0; i < n2; i++) { 7 var d = i; 8 var p = n2; 9 for (var j = 0; j < n; j++) { 10 省略(Console.Write, p, dの計算など34行ほどになります) 11 } 12 Console.WriteLine(); 13 } 14 } 15}

投稿2017/11/23 15:36

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

arpana

2017/11/24 04:00

KSwordOfHasteさん 一部異なりますが、(1)のコードに下記を加えることで、うまく動きました。 勉強になりました。ありがとうございました。 for (int y = 1; y <= size; y++) { Calc(n + 1, str + y + " "); }
guest

0

こんにちは。

配列を使いたくない理由が不明ですが、配列でなければ良いのであればListを使えばできますよ。
前回のソースの配列部分をList<int>へ変更するイメージです。
答えを書いてしまうとためになりませんので、この辺で失礼します。

投稿2017/11/23 14:46

Chironian

総合スコア23272

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

arpana

2017/11/24 02:56

Chironianさん ありがとうございます。勉強になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問