C言語であみだくじを作りたい
配列0〜8に数字1〜9が入っているとする
(1, 2, 3, 4, 5, 6, 7, 8, 9)
横線が入ると、数字の値が入れ替わる
(2, 3) -> (3, 2)
(8, 9) -> (9, 8)
最終的に
(1, 3, 2, 4, 5, 6, 7, 9, 8)
図で書くとこんな感じか
これをプログラミングで書きたい
1回交換するだけなら
#include#include #include int main(){ int a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8}; int i, num1, num2, tmp; srand((unsigned int)time(NULL)); num1 = rand() % 9; if(num1 == 8){ num1 = 7; } num2 = num1 + 1; tmp = a[num1]; a[num1] = a[num2]; a[num2] = tmp; for(i=0; i<9; i++){ printf("%d ",a[i]); } printf("\n"); return 0; }
$ gcc -o main main.c
$ ./main
0 1 2 4 3 5 6 7 8
$ ./main
0 1 2 3 5 4 6 7 8
これを複数回変更したい
#include#include #include int main(){ static int a[] = {0, 1, 2, 3, 4, 5, 6, 7, 8}; int i, j, num1, num2, tmp; srand((unsigned int)time(NULL)); for(i=0; i<3; i++){ num1 = rand() % 9; if(num1 == 8){ num1 = 7; } num2 = num1 + 1; printf("%d回目に変更したのは%d番目と%d番目\n", i+1, num1+1, num2+1); tmp = a[num1]; a[num1] = a[num2]; a[num2] = tmp; } for(j=0; j<9; j++){ printf("%d ",a[j]); } printf("\n"); return 0; }
$ ./main
1回目に変更したのは3番目と4番目
2回目に変更したのは4番目と5番目
3回目に変更したのは8番目と9番目
0 1 3 4 2 5 6 8 7
$ ./main
1回目に変更したのは7番目と8番目
2回目に変更したのは6番目と7番目
3回目に変更したのは5番目と6番目
0 1 2 3 7 4 5 6 8
いいねー、3時間ぐらいかかったけど