如何比较和替换(int)指针



所以我有这段代码:

     int* get_lotto_draw() //Returns an array of six random lottery numbers 1-49
{
     int min = 1;
     int max = 49;
     int counter = 0;
     srand(time(NULL));
     int *arrayPointer = malloc(6 * sizeof(int));
     for(counter = 0; counter <= 5; counter++)
     {
                 arrayPointer[counter] = rand()%(max-min)+min;
     }  
     return arrayPointer;
}

这给了我6个int*,但有时这些int*值可以是相同的。我如何将它们相互比较,以便如果它们是相同的数字,它将重新计算一个相等的值?感谢您的宝贵时间。

在数组中搜索相同的数字,然后将该数字存储为

for(counter = 0; counter <= 5; counter++)
     {
        int x1 = 1;
        while(x1)
        {
          int temp = rand()%(max-min)+min;
          for(i = 0; i < counter; i++)
          {
             if(arrayPointer[i] == temp)
             {
                break;
             }
          } 
          if(i == counter)
          {
            x1 = 0;
            arrayPointer[counter] = temp;
          }
        }
     }

问题是随机数生成器不知道或不关心历史(至少,不像您那样关心历史——软件随机数生成器使用最近的结果来生成未来的结果)。因此,您的选择通常是…

  • 接受复制的可能性。显然,这对你没用。
  • 检查之前的结果,通过重复绘制直到值唯一来丢弃重复的结果。如果你的随机数陷入循环,这种情况可能永远不会结束。
  • 枚举可能的值,对它们进行洗牌,并根据需要从列表中选择值。显然,如果您有大量可能的值,那么这是不明智的。

对你来说,我会选第三个。

  • 创建一个足够大的数组(int[])来保存每个可能的值(1-49)中的一个。
  • 使用for循环初始化每个数组值。
  • 使用另一个for循环交换每个条目与一个随机索引。如果你与自己交换位置,那是可以的。
  • 使用数组的前几个(6)个元素

如果你愿意,你可以把第二步和第三步结合起来,但对我来说,把它们分开似乎更容易读,更不容易出错。

最新更新