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

时间:2014-03-23 17:10:45

标签: c pointers equality

所以我有这段代码:

     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 *值可以是相同的。我如何将它们中的每一个进行比较,以便如果它们是相同的数字,它将重新计算相等的值?谢谢你的时间。

2 个答案:

答案 0 :(得分:1)

在将数字存储为

之前,在数组中搜索相同的数字
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;
          }
        }
     }

答案 1 :(得分:0)

问题在于随机数生成器不知道或不关心历史(至少,不是你所做的那样 - 软件随机数生成器使用最近的结果来生成未来的结果)。所以,你的选择通常是......

  • 有重复的可能性。显然,这对你没有帮助。
  • 查看以前的结果并通过重复绘制来丢弃重复项,直到该值唯一。如果你的随机数被卡在一个循环中,这有可能永远不会结束。
  • 枚举可能的值,将它们随机播放,然后根据需要从列表中选择值。显然,如果你有一套巨大的可能价值,这是不明智的。

在你的情况下,我会选择第三个。

  • 创建一个足以容纳每个可能值(1-49)之一的数组(int[])。
  • 使用for循环初始化每个数组值。
  • 使用另一个for循环用随机索引交换每个条目。如果你将一个职位与自己交换,那很好。
  • 使用数组的前几(6)个元素。

如果需要,您可以合并第二步和第三步,但拆分它们似乎更具可读性,并且不容易出错。