【问题标题】:Random unique number arrays comparison C++随机唯一数数组比较 C++
【发布时间】:2015-04-11 17:10:18
【问题描述】:

我有两个整数类型的二维数组。我将随机值分配给这两个数组。第一列中的值表示 a 和 b 的 x 值,第二列中的值表示 a 和 b 的 y 值。

声明数组

int ROW(12), COLUMN(2);
int a[ROW][COLUMN];
int b[ROW][COLUMN];

为数组分配随机值

    for (int i(0); i < ROW; i++)
    {
        a[i][0] = Random(SIZEX - 2);    //horizontal coordinate in range [1..(SIZEX - 2)]
        a[i][1] = Random(SIZEY - 2);    //vertical coordinate in range [1..(SIZEY - 2)]
    }

    for (int i(0); i < (ROW - 4); i++)
    {
        b[i][0] = Random(SIZEX - 2);    //horizontal coordinate in range [1..(SIZEX - 2)]
        b[i][1] = Random(SIZEY - 2);    //vertical coordinate in range [1..(SIZEY - 2)]
    }

我需要找到一种方法,可以将一行的 x 和 y 值与每个数组中的每一行的 x 和 y 值以及另一个数组进行比较,并确保 x 和y 对于两个数组都是唯一的。

因为坐标将与另一个数组中的位置相关。

我有一个非常混乱的解决方案,适用于其中一个数组。

for (int i(0); i < COLUMN; ++i)
{
    if (i == 0)
    {
        while (b[i][0] == spot.x)
            b[i][0] = Random(SIZEX - 2);
    }

    if (i == 1)
    {
        while ((b[i][0] == spot.x) || (b[i][0] == b[i - 1][0]))
            b[i][0] = Random(SIZEX - 2);
    }

    if (i == 2)
    {
        while ((b[i][0] == spot.x) || (b[i][0] == b[i - 2][0]) || (b[i][0] == b[i - 1][0]))
            b[i][0] = Random(SIZEX - 2);
    }

    if (i == 3)
    {
        while ((b[i][0] == spot.x) || (b[i][0] == b[i - 3][0]) || (b[i][0] == b[i - 2][0]) || (b[i][0] == b[i - 1][0]))
            b[i][0] = Random(SIZEX - 2);
    }

    if (i == 4)
    {
        while ((b[i][0] == spot.x) || (b[i][0] == b[i - 4][0]) || (b[i][0] == b[i - 3][0]) || (b[i][0] == b[i - 2][0])
            || (b[i][0] == b[i - 1][0]))
            b[i][0] = Random(SIZEX - 2);
    }

    if (i == 5)
    {
        while ((b[i][0] == spot.x) || (b[i][0] == b[i - 5][0]) || (b[i][0] == b[i - 4][0]) || (b[i][0] == b[i - 3][0])
            || (b[i][0] == b[i - 2][0]) || (b[i][0] == b[i - 1][0]))
            b[i][0] = Random(SIZEX - 2);
    }

    if (i == 6)
    {
        while ((b[i][0] == spot.x) || (b[i][0] == b[i - 6][0]) || (b[i][0] == b[i - 5][0]) || (b[i][0] == b[i - 4][0])
            || (b[i][0] == b[i - 3][0]) || (b[i][0] == b[i - 2][0]) || (b[i][0] == b[i - 1][0]))
            b[i][0] = Random(SIZEX - 2);
    }

    if (i == 7)
    {
        while ((b[i][0] == spot.x) || (b[i][0] == b[i - 7][0]) || (b[i][0] == b[i - 6][0]) || (b[i][0] == b[i - 5][0])
            || (b[i][0] == b[i - 4][0]) || (b[i][0] == b[i - 3][0]) || (b[i][0] == b[i - 2][0]) 
            || (b[i][0] == b[i - 1][0]))
            b[i][0] = Random(SIZEX - 2);
    }
}

但它只比较 x(第一列)。 spot 代表一个结构体变量。

【问题讨论】:

  • 你能告诉我们你到目前为止所做的尝试吗?没有任何内置功能可以为您做到这一点。
  • 你不想只是洗牌吗?

标签: c++ arrays random 2d


【解决方案1】:

你可以试试

for (int i=0;i<12;i++)
{for (int k=i+1;k<12;k++)
 {if (a[i][0]==a[k][0])
 cout<<"a["<<i<<"][0] same as a["<<k<<"][0]"<<endl;//you can assign a new number to a[k][0]
}};

【讨论】:

    猜你喜欢
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多