[编辑 - 新信息,旧代码已删除]:
在这个代码段中,我生成的行和列类似于你所做的,但是因为我没有这个random();
函数,所以我自己编写了。在其中,我可以进行调整,以保证在创建的样本中配对。这使您可以看到列和行中的“对”计数正确发生。如果没有这种测试能力,我发现随机函数很少会创建相同值(一对)的连续样本。在函数中查找注释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 对),第二张是使用注释clock()
函数生成的数据以强制多对:
通常生成的样本:
使用修改后的 random() 函数创建的示例: