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

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

ただいまの
回答率

91.35%

  • C#

    4755questions

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

C# 総当たりパターン2

解決済

回答 2

投稿 2017/11/23 12:42 ・編集 2017/11/23 22:22

  • 評価
  • クリップ 0
  • VIEW 111

arpana

score 4

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

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

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

using System;

class Sample
{
    static int size = 3;

    public static void Main()
    {
        Calc(0);
    }

    static void Calc(int n)
    {
        for(int y = 1; y <= size; y++)
        {
            if (size <= n)
            {
                Console.WriteLine();
                break;
            }
            Calc(n + 1);
        }
    }
}

【処理結果】
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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • Chironian

    2017/11/23 15:40

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

    キャンセル

  • arpana

    2017/11/23 22:23

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

    キャンセル

回答 2

checkベストアンサー

+1

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

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

class Sample1 {
  static void Test() {
    int n = 3;
    iterate(n, 0, "");
  }

  static void Calc(int n, int i, String s) {
    if (i >= n) {
      Console.WriteLine(s);
    } else {
      省略(一重ループと再帰呼び出しが入ります)
    }
  }    
}

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

class Sample2 {
  static void Test() {
    int n = 3;

    var n2 = n * n;
    for (var i = 0; i < n2; i++) {
      var d = i;
      var p = n2;
      for (var j = 0; j < n; j++) {
        省略(Console.Write, p, dの計算など34行ほどになります)
      }
      Console.WriteLine();
    }
  }
}

投稿 2017/11/24 00:36

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/24 13:00

    KSwordOfHasteさん

    一部異なりますが、(1)のコードに下記を加えることで、うまく動きました。
    勉強になりました。ありがとうございました。

    for (int y = 1; y <= size; y++) {
    Calc(n + 1, str + y + " ");
    }

    キャンセル

+1

こんにちは。

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

投稿 2017/11/23 23:46

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/11/24 11:56

    Chironianさん

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

    キャンセル

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

ただいまの回答率

91.35%

関連した質問

同じタグがついた質問を見る

  • C#

    4755questions

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