[編集 - 新しい情報、古いコードを削除]:
random();
このコード セグメントでは、実行したのと同様の行と列を生成しますが、関数がないため、独自に記述しました。その中で、作成したサンプル内でペアが保証されるように調整できるようにしました。これにより、列と行内の「ペア」カウントが正しく発生することがわかります。このテスト機能がないと、ランダム関数が同じ値 (ペア) の連続したサンプルを作成することはめったにないことがわかりました。関数内のコメントを探し、コメント付き(2 か所) とコメントなし random()
の両方の方法で実行します。clock()
変更されたrandom()
機能:
trying = 1;
//val = clock(); //To force pairs, comment here
while(trying)
{
//while(val == clock()); //To force pairs, comment here
srand(clock());
新しいコードは次のとおりです: (上記の変更なし)
#include <ansi_c.h>
enum {
row,
col
};
#define ROWS 20
#define COLS 30
int GetNumPairs(int arr[ROWS][COLS], int index, int type);
int random(int min, int max);
int main(void)
{
int i=0, j=0;
int array[ROWS][COLS];
int countPairs[260];
//int countPairsRows[260];
memset(array, 0, sizeof(int)*ROWS*COLS);
for(i=0;i<ROWS;i++)
{
for(j=0;j<COLS;j++)
{
array[i][j] = random('A', 'Z'); //min, max value to be produced
printf("%c", array[i][j]);
}
printf("\n");
}
printf("\n\n");
memset(countPairs, 0, sizeof(int)*260);//clear memory first
//pairs in columns, must traverse rows from 0 to 19
for(i=1;i<=ROWS;i++)
{
countPairs[i]=GetNumPairs(array, i-1, row);
printf("row %d has %d pairs\n", i, countPairs[i]);
}
printf("\n\n");
memset(countPairs, 0, sizeof(int)*260);//clear memory again
//pairs in rows, must traverse columns from 0 to 29
for(i=1;i<=COLS;i++)
{
countPairs[i]=GetNumPairs(array, i-1, col);
printf("col %d has %d pairs\n", i, countPairs[i]);
}
getchar();
return 0;
}
int random(int min, int max)
{
int random=0, trying=0;
clock_t val;
trying = 1;
val = clock(); //To force pairs, comment here
while(trying)
{
while(val == clock()); //To force pairs, comment here
srand(clock());
random = (rand()/32767.0)*(max+1);
((random >= min)) ? (trying = 0) : (trying = 1);
}
return random;
}
int GetNumPairs(int arr[ROWS][COLS], int index, int type)
{
int i, j,cnt=0;
switch(type){
case row:
for(i=0;i<COLS-1;i++)
{
if(arr[index][i] == arr[index][i+1])
{
cnt++;
}
}
break;
case col:
for(j=0;j<ROWS-1;j++)
{
if(arr[j][index] == arr[j+1][index])
{
cnt++;
}
}
break;
};
return cnt;
}
以下は、(1) 通常生成されたサンプル (少数のペアから 0 ペアまで) を示す 2 つの画像ですclock()
。
通常生成されるサンプル:

random() 関数を変更して作成したサンプル:
