[编辑 - 新的信息,旧的代码删除]:
在这个代码段,我产生类似于你做了什么的行和列,但因为我没有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()
功能生成数据,以迫使许多对:
通常生成的样本:

样品具有修饰的随机()函数创建:

听起来像你想要做的是一个填字游戏。应该把这个问题。其次,你用x和y声明你的数组,它们都是零。 – 2013-11-01 22:33:47
你能给出一个这样的矩阵的一个简单的例子,什么定义一对?数组[x] [y] ==数组[x + 1] [y + 1]'也算作一对吗? – PhillipD
char数组[0] [0];不是一个非常大的数组。肯定少于20或30。另外,我会把65换成'A'。 –