俄罗斯方块新增行算法:不拘一格编程序之二
来源:优易学  2010-1-14 19:21:33   【优易学:中国教育考试门户网】   资料下载   IT书店

  【题目】:
  一个数组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) 重新来过。
  重新来过又有多种表示方法:
  【方法1.3】:标签法
  label1:
  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) goto lable1;
  【方法1.4】:循环法法
  n1=1;n2=1;
  while (n1==1||n2==1)
  {
  n1 = 1;
  n2 = 1;
  for (int i=0; i<10; i++)
  {
  a[i] = random(2);
  if (a[i] == 0)    n2 = 0 ;
  else n1 = 0;
  }
  }
  【方法1.5】:循环法
  int sum=0;
  while(sum=0 || sum==10)
  {
  sum=0;
  for (int i=0; i<10; i++)
  {
  a[i] = random(2);
  sum += a[i];
  }
  }

[1] [2] 下一页

责任编辑:cyth

文章搜索:
 相关文章
热点资讯
资讯快报
热门课程培训