输出4组7个上升有序和唯一的随机数

时间:2013-10-19 16:09:58

标签: c++ arrays duplicates

我在如何解决我的问题时遇到了一些困难,我想为什么不去这里并向专业人士寻求帮助。

最重要的是,我在学校里只学习了几个星期的C ++,大致是这样 我一直在经历if / else,for / while / do循环,数组以及显然是一些更基本的东西,所以我试图解决这个问题时的主要问题是我的知识是否足够? 如果我阅读有关矢量等,这会更容易解决吗?

现在,我成功的做法是对我解决的数字进行排序: 基本上我使用的是冒泡排序算法(我认为?)

for(int i=0; i<6; i++) 
{
    for(int j=0; j<6; j++)
    {
        if(slump[j]>random[j+1])        
        {
            temp = random[j];
            slump[j] = random[j+1];
            slump[j+1] = random;        
        }
    }
}

然而,我不能为我的生活找出如何防止重复出现(从行到行可能有重复但不在同一行上)从0分配每个索引时-6一个随机数。

for(int j=0;j<7;j++) 
{
    random[j] = rand()%40+1;
}

我希望自己有点清楚,因为英语不是我的母语,请告诉我是否需要澄清任何内容。我希望我能找到一些如何解决这个问题的帮助,这里有一个不太复杂的解决方案。

2 个答案:

答案 0 :(得分:2)

排序程序无法帮助您防止重复,因此必须在之前解决

首先,确保没有重复的数字。当你得到所需的所有数字时。

为确保没有随机数,有两个选项:

  • 生成每个号码后,检查已获得的号码。如果重复,则将其丢弃并获得一个新的随机数。

  • 由于您需要40个范围内的7个数字,因此只需将其用作订单即可。第一个数字在0-39之间选取,第二个数字在0-38之间,依此类推。已经使用的数字被跳过(因此,随机序列3-5-2-4表示数字序列3-6-2-7)

答案 1 :(得分:0)

嗯,检查重复项不应该太难。

您可以尝试以下方法:

for (int i = 0; i < 7; i++)
{
  random[i] = rand%40 + 1;
}

for (int i = 0; i < 7; i++)
{
   for (int j = 1; j < 7; j++)
   {
     if(random[i] == random[j])
     {
        random[i] = rand%40 + 1;
        i = i -1;
        break;
     }
   }
}

我很确定这应该是一个profecceint检查是否已经在随机[]中重复了一个数字。此外,即使向量更有趣并且更容易使用,它们也不会使这个操作更容易。

希望它有所帮助。 =)