有趣的,有探讨性的,随机数问题?

cache333 2003-12-12 06:25:06
const UINT16* Icon_Map[21] = {
icon_a, icon_b, icon_c, icon_d ,con_e,icon_f, icon_g,icon_h,icon_i,icon_j,icon_k,icon_l,icon_m,icon_n, icon_o,icon_p,icon_q,icon_r,icon_s,icon_t,icon_u
};
随机取出数组Icon_Map中的元素,按成对出现的原则 例如
icon_a , icon_b, icon_b, icon_a, icon_d,icon_c, icon_d, icon_c,

也可以出现两对(4个同),分别存入a[4][6],b[5][8],c[6][7]
...全文
5 10 打赏 收藏 举报
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
cache333 2003-12-22
cxjddd(空浮无根) :
不好意思,回家了一趟,没有来结贴!
不过你的程序有点小小的问题,
/* 传一个二维数组,即arr[row][col]. */
void initarr(int * arr, unsigned int row, unsigned col)
{
int p = row * col / 2;
int i;

// 先生成一个序列,其中两两元素相等
for (i = 0; i < p; i++)
arr[i*2] = arr[i*2+1] = rand() % 20 + 1;
//???这里不可以保证两两不同(一对一对的),可以产生4,6,8相同的,

p *= 2;
for (i = 0; i < p; i++)
{
// 随机交换 arr 里的两个元素
int a, b;
int t;
a = rand () % p;
b = rand () % p;
t = arr[a];
arr[a] = arr[b];
arr[b] = t;
}
return;
}
  • 打赏
  • 举报
回复
cxjddd 2003-12-13
sturct array2
{
int* a;
int row, col;
};
  • 打赏
  • 举报
回复
cxjddd 2003-12-12
/* 传一个二维数组,即arr[row][col]. */
void initarr(int * arr, unsigned int row, unsigned col)
{
int p = row * col / 2;
int i;

// 先生成一个序列,其中两两元素相等
for (i = 0; i < p; i++)
arr[i*2] = arr[i*2+1] = rand() % 20 + 1;

p *= 2;
for (i = 0; i < p; i++)
{
// 随机交换 arr 里的两个元素
int a, b;
int t;
a = rand () % p;
b = rand () % p;
t = arr[a];
arr[a] = arr[b];
arr[b] = t;
}
return;
}
  • 打赏
  • 举报
回复
cache333 2003-12-12
为传入动态数组去记录生成的动态元素,需要一下相关的操作
怎样设计好接口呢?????????
int *p
switch(Judge)
{
case 1:p=(int *)malloc(sizeof(int)*20);break;
case 2:p=(int *)malloc(sizeof(int)*30);break;
case 3:p=(int *)malloc(sizeof(int)*42);break;
}...
  • 打赏
  • 举报
回复
cache333 2003-12-12
cxjddd(空浮无根)可否把你的思想用C详细写一下
  • 打赏
  • 举报
回复
cache333 2003-12-12
生成随机二维数组,数组要求是动态的,生成的元素去添a[5][4] a[6][5] a[7][6]
如a[5][4]
1 2 1 2
4 3 2 2
6 6 3 4
5 7 7 5
8 9 9 10
10 8 11 12
12 11 13 13

即 1 到 6 之间的数要偶数对出现,对数最多不大于两队(既4个相同的)

参考
#ifndef randomize
#define randomize() srand((unsigned)time(NULL))
#endif

#ifndef random
#define random(num) (rand() % (num))
#endif



/* 传一个二维数组,即arr[row][col]. */
void initarr(int * arr, unsigned int row, unsigned col)
{
int rval;
unsigned int rrow, rcol;
unsigned int i, j;
unsigned int x;

assert(arr && row>0 && col>0);
memset(arr, 0, row * col * sizeof(int));

randomize();
for ( i = 0; i < row; i ++)
{
for (j = 0; j < col; j++)
{
if ( *(arr + i * col + j) == 0)
{
rval = random(6)+ 1;
*(arr + i * col + j) = rval;

rrow = random(row);
rcol = random(col);
for (x = rrow * col + rcol; x < col * row ; x++)
{
if (*(arr + x ) == 0)
{
*(arr + x) = rval;
break;
}
}
if ( x == col * row)
{
for (x = rrow * col + rcol; x > i * col + j ; x--)
{
if (*(arr + x ) == 0)
{
*(arr + x) = rval;
break;
}
}
if (x == i * col + j)
return;
}
}
}
}
return;
}

  • 打赏
  • 举报
回复
cxjddd 2003-12-12
你是不是在做游戏?
  • 打赏
  • 举报
回复
cxjddd 2003-12-12
先形成如: 1 1 4 4 3 3 0 0 9 9 2 2 ……这样的队列,然后再打乱就得了

int a[m][n];
int* aa = a[0];
int p = m * n / 2;
int i;
for (i = 0; i < p; i++)
aa[i*2] = aa[i*2+1] = rand()%21;
std::random_shuffle (aa, aa + m * n); // C++ STL 的算法,如果是 C 的话,……
  • 打赏
  • 举报
回复
19830711 2003-12-12
看不懂呀
  • 打赏
  • 举报
回复
lbaby 2003-12-12
无聊的,不知所措的,不明白的回答:
把原题帖出来吧?
  • 打赏
  • 举报
回复
相关推荐
发帖
C语言
加入

6.6w+

社区成员

C语言相关问题讨论
社区管理员
  • C语言
  • 小灸舞
申请成为版主
帖子事件
创建了帖子
2003-12-12 06:25
社区公告
暂无公告