C言語で1~10の数字を使用し、[5][20]の配列内で数字を被ることなく全ての組み合わせを表示させるプログラムを組もうと考えているのですがどのようにすればいいのか分かりません。ご教授ください。
例としてはこのような感じです。
12345678910**********
*12345678910*********
**12345678910********
***12345678910*******
****12345678910******
*12345678910*********
**12345678910********
***12345678910*******
****12345678910******
*****12345678910*****
…
(*は空白の意)
配列の表示と組み合わせについて
- Dixq (管理人)
- 管理人
- 記事: 1662
- 登録日時: 14年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: 配列の表示と組み合わせについて
出題内容がよくわかりません。
「全ての組み合わせ」とはどういうものですか?通常の順列組み合わせだと思えばいいのでしょうか?
要素20の文字が5組になっている関係性はどのようなものですか?
******12345678910****
*******12345678910***
********12345678910**
*********12345678910*
**********12345678910
ここまで行ったら次はどうなるんでしょうか?ループするのですか?
*******12345678910***
********12345678910**
*********12345678910*
**********12345678910
10**********123456789
*******12345678910**
********12345678910*
*********12345678910
10*********123456789
910*********12345678
こんな感じですか?
10だけ2文字なのがきになりますが、0じゃなく10ですか?
「全ての組み合わせ」とはどういうものですか?通常の順列組み合わせだと思えばいいのでしょうか?
要素20の文字が5組になっている関係性はどのようなものですか?
******12345678910****
*******12345678910***
********12345678910**
*********12345678910*
**********12345678910
ここまで行ったら次はどうなるんでしょうか?ループするのですか?
*******12345678910***
********12345678910**
*********12345678910*
**********12345678910
10**********123456789
*******12345678910**
********12345678910*
*********12345678910
10*********123456789
910*********12345678
こんな感じですか?
10だけ2文字なのがきになりますが、0じゃなく10ですか?
- Dixq (管理人)
- 管理人
- 記事: 1662
- 登録日時: 14年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: 配列の表示と組み合わせについて
私が想像している仕様でしたらこんな感じでしょうか・・。
実行結果
#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