Welcome

首页 / 软件开发 / 数据结构与算法 / 俄罗斯方块新增行算法:不拘一格编程序之二

俄罗斯方块新增行算法:不拘一格编程序之二2010-01-28朱云翔【题目】:

一个数组int a[10],要求为每个元素随机赋值0或者1,但是这10个元素不能全0,也不能全1。

【说明】:俄罗斯方块中需要在最下面插入若干具有随机方块的行,以增加游戏的难度。当然不能一行全是方块,这样就不能掉呢。也不能没有方块,那样难度会小一些。

【方法1】逐个随机,统一判断

随机产生10个元素,如果都是0,或者都是1,就重新生成。

算法的关键不是逐个产生随机数,而是如何确定产生的随机数是全0?全1?或者0、1都有。

【方法1.1】标志法(部分法)

增加变量n1。如果n1=1表示10个随机数全为0.

在增加变量n2。如果n2=1表示10个随机数全为1.

int n1 =1, n2 = 1;
for (int i=0; i<10; i++)
{
a[i] = random(2);
if (a[i] == 0) n2 = 0 ;
else n1 = 0;
}

if (n1 == 1 || n2 == 1) 重新来过。

【方法1.2】整体法

将a[i]的取值全部加起来,结果为0表示全0,结果为10表示全1。

int sum=0;
for (int i=0; i<10; i++)
{
a[i] = random(2);
sum += a[i];
}

if (sum==0 || sum == 10) 重新来过。

重新来过又有多种表示方法: