题目如下:
   在0-13内随机生成7个数字,要求如下:0可以出现多次,其他数字只能出现一次,比如0,3,5,7,1,0,10等,并对生成的该组数字判断,要求如下:数组内数字0可以替换0-13内的任何数字,如果被该数组内能形成5个连续的数字,则正确,否则不正确;
比如:0,3,1,4,0,13,10能转换成0,1,2,3,4,10,13--》正确;
      1,3,0,0,0,7,9能转换1,2,3,4,5,7,9或者1,3,5,6,7,8,9--》都正确
     1,6,9,11,13,0,7---》不正确

解决方案 »

  1.   

    我做了一个你可以看看 不知道对不对
    Random rd=new Random();
    int[] num=new int[7];
    int snum=-1;
    int count=0;
    for(int i=0;i<7;i++)
    {
      num[i]=rd.Next(13);
      Console.Write("{0},",num[i].ToString());
      if(i==0)
      {
        snum=num[0];
        count++;
        continue;
      }
      if(snum==num[i]-1 || snum==0)
      {
        count++;
        if(count==5)
          break;
      }
      else
      {
        count=0;
      }
      snum=num[i];
    }
    if(count==5)
    {
      Console.WriteLine("正确");
    }
    else
    {
      Console.WriteLine("错误");
    }
    Console.ReadKey();
      

  2.   

    这看起来似乎不简单 但其实是不难的
    宣告:
    1..一个布林阵列A,大小为你数字欲产生的范围,里面只放0跟1代表true或false,预设值为0
    2.宣告一个for回圈来随机产生7个数字
    3.将 A[随机产生的数字] 设为1,并另纪录0的个数为B
    4.再用一个Count来存入此A阵列最大连续的1个数,注:A[0]先不计
    5.最后把Count加上0的个数B
    6.判断是否大于等于5就行啦若你要连续跑的话,则步骤2之上再设定一个for回圈,但记得把Count(最大连续累加数),B(0的个数)跟A阵列所有值归零
      

  3.   

    判断第4步骤的最大连续数
    1.另外设定一个MaxCount
    2.Count持续累加,直到碰到下一个A中值为0
       跟MaxCount比较
       if( Count > MaxCount )
       {
            MaxCount = Count;
            Count = 0;
       }
    3.直到回圈跑到A最后为止再跟MaxCount比较一次记得,当你要重新产生新的7个数字前,包括这个MaxCount也都要归零才行
      

  4.   

    我想的一个方法:
    1.先对随机产生的数按从小到大进行排序
    2.记录下有多少个0,保存在num中
    3.开始对排序之后的数组遍历,从第一个不是0的数开始,用与它之后的第5-num个数的差值数与他们的位置差值数相减,看是否小于num,若比num小,则返回true,否则返回false.当然应该还会有更好的办法。
      

  5.   

    如果要用排序的方法,那用ArrayList.sort()吧,方便又好用
      

  6.   

    看看是不是这意思,画一个button和一个label。
    using System.Collections;private int counter;
            private void button1_Click(object sender, EventArgs e)
            {
                Random rd = new Random();
                ArrayList al = new ArrayList();
            
                while (al.Count!=7)
                {
                    al.Add(rd.Next(0,13));
                    if (al[al.Count-1].ToString() != "0")
                    {
                        for (int i = 0; i < al.Count-1; i++)
                        {
                            if (al[al.Count - 1].ToString() == al[i].ToString())
                            {
                                al.RemoveAt(al.Count -1);
                            }
                        }
                    }
                }
                al.Sort();
                al.ToArray();
                label1.Text = "";            for (int i = 0; i < 7; i++)
                {
                    label1.Text += al[i].ToString()+" ";
                }
                if (CheckCount(al)  == true)
                {
                    MessageBox.Show("您生成了正确的7个数。");
                }
                else
                {
                    MessageBox.Show("您生成的不正确,请点击按钮重新生成。");
                }
            }
            private bool CheckCount(ArrayList al)
            {
                bool flg = false;
                for (int i = 1; i < 7; i++)
                {
                    if ((int)al[i] == (int)al[i - 1] + 1)
                    {
                        counter += 1;
                        if (counter == 4)
                        {
                            flg = true;
                        }
                        if (counter > 4)
                        {
                            flg = false;
                        }
                    }
                    else
                    {
                        counter = 0;
                    }
                }
                counter = 0;
                return flg;
            }
           
        }
      

  7.   

    呵呵,拿来练手了  搞定了添加一个button和一个label,label拉长一点
    private void 
    button1_Click(object sender, EventArgs e)
          {
    ArrayList al = new ArrayList();
    al=generate();
    label1.Text = "";
    for (int i = 0; i < 7; i++)
    {
    label1.Text += al[i].ToString()+" ";
    }
    if (CheckCount(al)  == true)
    {
    MessageBox.Show("您生成了正确的7个数。");
    }
    else
    {
    MessageBox.Show("您生成的不正确,重新生成。");
    }
    }
    //产生符合要求的随机数列,避免了产生的随机数列概率不等的情况!!
    private ArrayList generate()
    {
    Random rd = new Random();
    ArrayList al = new ArrayList();
            
    while (al.Count!=7)
    {
    al.Add(rd.Next(0,13));
    }
    al.Sort();
    for(int i=0;i<6;i++)
    {
    if((int)al[i]!=0&&(int)al[i]==(int)al[i+1])
    al=generate();
    }
    return al;
    }
    private bool CheckCount(ArrayList al)
    {
    bool flg = false;
    //如果随机数列中0的个数大于3,那么该数列一定正确
    if((int)al[2]==0) 
    flg=true;
    //如果数列中0的个数为2,那么al[i+2]-al[i]<6时数列才正确
    else if((int)al[1]==0)
    for(int i=2;i<5;i++)
    {
    if((int)al[i+2]-(int)al[i]<6)
    flg=true;
    }
    //如果数列中0的个数为1,那么al[i+3]-al[i]<6时数列才正确
    else if((int)al[0]==0)
    for(int i=1;i<4;i++)
    {
    if((int)al[i+3]-(int)al[i]<6)
    flg=true;
    }
              //如果数列中0的个数为0,那么al[i+4]-al[i]<6时数列才正确
    else
    for(int i=0;i<3;i++)
    {
    if((int)al[i+4]-(int)al[i]<6)
    flg=true;
    }
    return flg;

           }