俄罗斯方块新增行算法:不拘一格编程序之二

【题目】:

一个数组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) 重新来过。

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

时间: 2024-12-21 16:57:48

俄罗斯方块新增行算法:不拘一格编程序之二的相关文章

循环打印算法:不拘一格编程序之一

小说中经常有人说某某将领打仗天马行空,不拘一格,让敌人防不胜防,比如<寻秦记>中的李牧:比如<大唐双龙传>中的寇少. 编程序时也要有怎样的思想,不能被条条框框所束缚,比如这个例子: [例1]编写一个函数void fun(int t),要求在屏幕上打印t个"*"号,其中t的长度不会大于50. [设计1]: void fun(int t) { if (t<0 || t>50) return; switch(t) { case 1: printf(&quo

循环的各种形式:不拘一格编程序之四

求S=1+2+3+...+100的值. [算法1] int s=0, i; for (i=1; i<100; i++) { s += i; } [算法2] int s=0, i=1; while(i<=100) { s+= i++; } [算法3] int s=0, i=1; { s+=i++; }while(i<=100) [算法4] int s=0, i=1; lable: s += i++; if (i<=100) goto lable; [算法5] int s=0, i=1

变量取值交换的方法:不拘一格编程序之三

[题目]已知两变量a和b,设计一个算法,交换a与b的值. [方法1]最传统,最广泛,最著名的方法,增加一个变量,代码如下: int a, b; int c; c=a; a=b; b=c; [方法2]不增加第三个变量,交换a和b的值,代码如下: int a, b; a = a+b; b = a-b; a=a-b; 分析,设a和b的原始值为a,b 执行代码 变量a 变量b int a, b a b a=a+b a+b b b=a-b a+b a+b-b=a a=a-b a+b-(b)=a+b-a=b

DB2编程序技巧 (二)

1 DB2编程 1.1 建存储过程时Create 后一定不要用TAB键 create procedure 的create后只能用空格,而不可用tab健,否则编译会通不过. 切记,切记. 1.2 使用临时表   要注意,临时表只能建在user tempory tables space 上,如果database只有system tempory table space是不能建临时表的.   另外,DB2的临时表和sybase及oracle的临时表不太一样,DB2的临时表是在一个session内有效的.

054_《奇思异想编程序Delphi篇》

<奇思异想编程序Delphi篇> Delphi 教程 系列书籍 (054) <奇思异想编程序Delphi篇> 网友(邦)整理 EMail: shuaihj@163.com 下载地址: Pdf 作者: 蒋明礼 杨晓龙 出版社:国防工业出版社 ISBN:7118031690 上架时间:2004-1-29 出版日期:2004 年1月 开本:16开 页码:388 版次:1-1 内容简介 本书以通俗易懂的语言.列举大量的实例揭示了Delphi语言在系统编程.界面设计.组件编程.图像处理与多媒

一个统计表每天的新增行数及新增存储空间的功能_MsSql

使用文中提供的代码做一个统计表每天的新增行数及新增存储空间的功能 实现步骤如下: 1. 创建表 创建表,存储每天的表空间占用情况 CREATE TABLE [dbo].[t_rpt_table_spaceinfo]( [table_name] [sysname] NOT NULL, [record_date] [date] NOT NULL, [record_time] [time](7) NOT NULL, [rows_count] [bigint] NULL, [reserved] [big

DB2编程序技巧 (四)_DB2

正在看的db2教程是:DB2编程序技巧 (四).1.10 预防字段空值的处理 SELECT DEPTNO ,DEPTNAME ,COALESCE(MGRNO ,'ABSENT'),ADMRDEPT FROM DEPARTMENT    COALESCE函数返回()中表达式列表中第一个不为空的表达式,可以带多个表达式.    和oracle的isnull类似,但isnull好象只能两个表达式. 1.11 取得处理的记录数 declare v_count int; update tb_test se

如何去掉Datagrid中的新增行

datagrid   在编程中我们经常遇到这样的问题,我们想要Datagrid的readonly属性为False,直接在Datagrid中修改数据.但又不想让它出现新增的行,这个问题很多网友发贴问过,事实上实现起来非常简单,只是大家没想到而已.下面通过一个简单示例说明之 首先在界面中添加一个Datagrid和一个Button按钮,Name为默认值,双击Button1编写以下代码.     Private Sub Button1_Click(ByVal sender As System.Objec

MD5算法之C#程序 MD5算法描述

程序|算法 当我要写一个MD5算法的程序时,发现中英文的语言描述都有一些不确切的地方,某些个细节讲得不清楚,或者说很费解.最后不得不拿出C语言的源程序来调试,这对于理解算法是很不利的.于是就总结了一下我摸索到的一些要点. 1.来历MD5的全称是message-digest algorithm 5(信息-摘要算法,在90年代初由mit laboratory for computer science和rsa data security inc的ronald l. rivest开发出来,经md2.md