配列の表示と組み合わせについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら

トピックに返信する


答えを正確にご入力ください。答えられるかどうかでスパムボットか否かを判定します。

BBCode: ON
[img]: ON
[flash]: OFF
[url]: ON
スマイリー: OFF

トピックのレビュー
   

展開ビュー トピックのレビュー: 配列の表示と組み合わせについて

Re: 配列の表示と組み合わせについて

#4

by かずま » 7年前

Dixq (管理人) さんが書きました:私が想像している仕様でしたらこんな感じでしょうか・・。
表示が規則正しいものなので、内部で配列を持た
なくてもよければ、これで済んでしまいます。

コード:

#include <stdio.h>

int main(void)
{
    const char *s = "1234567890          ";
    for (int i = 21; --i > 0; putchar('\n'))
        for (int k = i, j = 5; --j >= 0; --k < 0 && (k += 20))
            printf("%s%.*s\n", s + k, k, s); 
}

Re: 配列の表示と組み合わせについて

#3

by Dixq (管理人) » 7年前

私が想像している仕様でしたらこんな感じでしょうか・・。

コード:

#include <stdio.h>

const static int NUM = 5;
const static int LEN = 20;

void displace(char arr[LEN]) {
    char tmp = arr[LEN-1];
    for (int i = LEN-1; i > 0; i--) {
        arr[i] = arr[i - 1];
    }
    arr[0] = tmp;
}

void initialize(char arr[NUM][LEN]) {
    char *str = "1234567890          ";
    for (int i = 0; i < NUM; i++) {
        for (int j = 0; j < LEN; j++) {
            arr[i][j] = str[j];
        }
    }
    for (int i = 0; i < NUM; i++) {
        for (int j = NUM - i; j < NUM; j++) {
            displace(arr[i]);
        }
    }
}

void show(char arr[NUM][LEN]) {
    for (int i = 0; i < NUM; i++) {
        for (int j = 0; j < LEN; j++) {
            printf("%c", arr[i][j]);
        }
        printf("\n");
    }
    printf("\n");
}

int main() {
    char arr[NUM][LEN];
    initialize(arr);
    for (int s = 0; s < LEN; s++) {
        show(arr);
        for (int i = 0; i < NUM; i++) {
            displace(arr[i]);
        }
    }
}
実行結果

コード:

1234567890
 1234567890
  1234567890
   1234567890
    1234567890

 1234567890
  1234567890
   1234567890
    1234567890
     1234567890

  1234567890
   1234567890
    1234567890
     1234567890
      1234567890

   1234567890
    1234567890
     1234567890
      1234567890
       1234567890

    1234567890
     1234567890
      1234567890
       1234567890
        1234567890

     1234567890
      1234567890
       1234567890
        1234567890
         1234567890

      1234567890
       1234567890
        1234567890
         1234567890
          1234567890

       1234567890
        1234567890
         1234567890
          1234567890
0          123456789

        1234567890
         1234567890
          1234567890
0          123456789
90          12345678

         1234567890
          1234567890
0          123456789
90          12345678
890          1234567

          1234567890
0          123456789
90          12345678
890          1234567
7890          123456

0          123456789
90          12345678
890          1234567
7890          123456
67890          12345

90          12345678
890          1234567
7890          123456
67890          12345
567890          1234

890          1234567
7890          123456
67890          12345
567890          1234
4567890          123

7890          123456
67890          12345
567890          1234
4567890          123
34567890          12

67890          12345
567890          1234
4567890          123
34567890          12
234567890          1

567890          1234
4567890          123
34567890          12
234567890          1
1234567890

4567890          123
34567890          12
234567890          1
1234567890
 1234567890

34567890          12
234567890          1
1234567890
 1234567890
  1234567890

234567890          1
1234567890
 1234567890
  1234567890
   1234567890

Re: 配列の表示と組み合わせについて

#2

by Dixq (管理人) » 7年前

出題内容がよくわかりません。
「全ての組み合わせ」とはどういうものですか?通常の順列組み合わせだと思えばいいのでしょうか?
要素20の文字が5組になっている関係性はどのようなものですか?

******12345678910****
*******12345678910***
********12345678910**
*********12345678910*
**********12345678910

ここまで行ったら次はどうなるんでしょうか?ループするのですか?

*******12345678910***
********12345678910**
*********12345678910*
**********12345678910
10**********123456789

*******12345678910**
********12345678910*
*********12345678910
10*********123456789
910*********12345678

こんな感じですか?
10だけ2文字なのがきになりますが、0じゃなく10ですか?

配列の表示と組み合わせについて

#1

by lambo » 7年前

C言語で1~10の数字を使用し、[5][20]の配列内で数字を被ることなく全ての組み合わせを表示させるプログラムを組もうと考えているのですがどのようにすればいいのか分かりません。ご教授ください。

例としてはこのような感じです。
12345678910**********
*12345678910*********
**12345678910********
***12345678910*******
****12345678910******

*12345678910*********
**12345678910********
***12345678910*******
****12345678910******
*****12345678910*****


(*は空白の意)

ページトップ