生成随机不同数字的数组

时间:2015-01-26 23:27:46

标签: c arrays random

我想在C中创建一个程序,它创建N个随机数的夫妻(x,y)并尊重以下条件:

  • N是5到13之间的随机数;
  • 所有夫妻(xi,yi)都不同;
  • 所有x和y元素之间的绝对差值至少为2.

我有点想解决这个问题。 我认为我应该创建三个函数:

  1. 一个函数,它将计算所计算的x或y元素与之前的元素之间的差异;
  2. 另一个检查所有情侣都不同的功能;
  3. 计算数组的最后一个函数。
  4. 现在我写了这些函数:

    int different (int i, int N, int adress)
    {
    // write something to get the array back from the address of first element      
    int count = 0;
    for (int k=0; k<i; k++)
        {
            if (array[k][0]=array[i][0] && array[k][1]=array[i][1])
            count++;
        }
        return count;
    }
    

    /

    int distance (int x, int i, int N, int adress)
    {   
    // write something to get the array back from the address of first element
        int count=0;
        for (int k = 0; k < i; ++k)
        {
            if (abs(array[i][x]-array[k][x]) < 2)
                count++;
        return count;
        }
    }
    

    /

    type coordinates (void)
    {
        N = rand()%8 + 5;
        int array[N][2];
        for (int i = 0; i < N; ++i)
        {
            do
            {
                int x = rand()%60 - 30;
                int y = rand()%60 - 30;
            } while (different(i, N, adress)>0 || distance(x, i, N, adress) || distance (y, i, N, adress));
            array[i][0] = x;
            array[i][1] = y;
        }
    }
    

    实际上我不知道如何将参数从一个函数提供给另一个函数。我想我应该使用指针,但不知道如何。

    如果有人可以帮助我,我的大脑会很开心。因为我试图改变我对这个问题的观点,但总有一些问题我可以解决。

    提前谢谢! :)

2 个答案:

答案 0 :(得分:0)

  1. 更改5到13生成器:5,6,7,8,9,10,11,12,13是9个数字

    // N = rand()%8 + 5;   
    N = rand()%9 + 5;
    
  2. different ()

    中进行比较,而不是分配
    // if (array[k][0]=array[i][0] && array[k][1]=array[i][1])
    if (array[k][0]==array[i][0] && array[k][1]==array[i][1])
    

答案 1 :(得分:0)

首先,我建议做这样的事情(尽管不是强制性的):

struct complex_number {
    int real;
    int img;
};

如果它适合你的风格,请输入此结构。就像你已经做的那样,一次生成一个复杂的值。然后,不要只复制while - 条件,而是写一个像

这样的函数

int is_candidate(struct complex_number *array, size_t size, struct complex_number candidate)

您收集所有确定数字是否为候选人的逻辑。

在这个函数中你可以坚持你的功能,但是你现在似乎遇到了正确的C语法问题。有两个主要问题:您从未传递实际数组,并使用=进行比较,这是分配,您应该使用==

就像例子一样:

//impelement your functions - left out
int is_same(struct complex_number c1, struct complex_number c2);
int check_distance(struct complex_number c1, struct complex_number c2);

int is_candidate(struct complex_number *array, size_t size, struct complex_number candidate){
   int i;
   for (i = 0; i < size; ++i){
      if (is_same(array[i], candidate) 
         || !(check_distance(array[i], candidate)){
          return false;
      }
   }
   return true;
}

你可以通过指针传递候选者,但在这种情况下,结构很小,可能不值得努力。如果候选者有效,则可以将其附加到数组的后面。您可以在此示例(数组)中看到如何将数组声明为函数参数,以及如何传递大小。此信息与阵列无关。 您可以直接将数组传递给此函数,而无需使用其地址或类似的任何内容。