配列に1から13までの数をセットし、「乱数で2つの数を選んで入れ替える」 作業を50回行い、結果を表示するプログラムを作る、という課題が出たので書いてみたのですが、実行結果が
./a.out
5 7 1 0 4 6 2 8 10 13 11 9 3
./a.out
10 4 6 3 9 13 1 7 0 5 11 2 12
./a.out
4 8 6 10 12 9 7 11 13 1 3 0 2
のように1~13ではなく0~13の範囲で表示されてしまいます。
以下が自分の書いたコードになります。
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main(void) {
int i;
int table[13] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13};
srand((unsigned)time(NULL));
for (i=0;i<50;i++) {
int first = table[(int)(rand()/(1.0+RAND_MAX)*13)+1];
int second = table[(int)(rand()/(1.0+RAND_MAX)*13)+1];
int temp = table[first];
int temp2 = table[second];
table[first] = temp2;
table[second] = temp;
}
for (i=0;i<13;i++) {
printf("%d ", table[i]);
}
printf("\n");
return 0;
}
どこをどのように直せば1~13の範囲で表示されるのでしょうか。
また、コンパイルはできているのですが、コードの中で単純化できたり、良くない書き方をしている箇所がありましたらご指摘お願いします。