我制作了一个程序来确定你的整数是否构成了一个魔方。有一个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];
}
}
至于完整的代码,它是一个漫长而结构化的奇怪方式,评论不是英文的,但我愿意按要求编辑它,如果它会有任何好处。 我没有使用图书馆。
答案 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.因此您可以通过此缓冲区数组检查无需进入二维数组中的所有元素。