数组中的唯一整数

时间:2014-12-09 16:08:37

标签: c++ arrays

我制作了一个程序来确定你的整数是否构成了一个魔方。有一个2D数组,我想填充数字,但你可能知道正方形由1到(N * N)的值组成,此时循环检查整数是否大于0,如果不是超出界限。 我想要做的是检查输入整数是否是唯一的,也就是说,如果之前没有在数组中使用它。我尝试用另一个充满了一个的数组和一个做循环做一些事情,但我有一些问题,只要我收到错误消息就执行循环,这让我相信它是只是一个糟糕的想法尝试,或它执行不力。也许你们中的任何人都知道如何执行这个循环并重新启动它。我想知道它是用另一个数组和做循环的正确方法 这是原始循环:

for (int i=0; i<N; i++)
for (int j=0; j<N; j++)
{
    cin >> arr[i][j];              ///Cikls ar kura palidzibu tiek aizpildits magiskais kvadrats
    if(arr[i][j] <= 0 || arr[i][j]>(N*N))
        {
            i=0;
            j=0;
            cout << error<< endl;
            cin >> arr[i][j];

        }
}

至于完整的代码,它是一个漫长而结构化的奇怪方式,评论不是英文的,但我愿意按要求编辑它,如果它会有任何好处。 我没有使用图书馆。

2 个答案:

答案 0 :(得分:1)

首先,你实现的逻辑是有缺陷的,因为它不能支持多个输入错误(在这些边界之外插入一个数字)。

假设客户端需要逐个插入一个正方形的整数,将其置于循环中应该可以正常工作。

arr[i][j] = -1;
do {
    cin >> arr[i][j];
    if (arr[i][j] <= 0 || arr[i][j]>(N*N)) {
        cout << error << endl;
    } else {
        break;
    }
} while (true);

至于唯一性的验证,我建议在一个集合中插入用户输入的数字,一个实用的解决方案来实现不同数字的矩阵(只需将数字已经在矩阵中放入集合中,然后检查是否新的输入数字在集合中)。修改整个代码:

std::set<int> numbers;
for (int i=0; i<N; i++) {
    for (int j=0; j<N; j++) {
        arr[i][j] = -1;
        do {
            cin >> arr[i][j];
            if (arr[i][j] <= 0
                    || arr[i][j]>(N*N)
                    || numbers.find(arr[i][j]) != numbers.end()) {
                cout << error << endl;
            } else {
                numbers.insert(arr[i][j]);
                break;
            }
        } while (true);
    }
}

答案 1 :(得分:0)

根据您的问题,一个解决方案可能是:

您可以创建一个缓冲区数组,该数组在特定索引处的值为1,该值已插入二维数组中。

即。

如果二维数组的值为3 然后在索引3处的缓冲区数组中放置1.因此您可以通过此缓冲区数组检查无需进入二维数组中的所有元素。