问题描述
不能使用库和其他方法。
您可以看到我的程序找到重复的数字并打印出来,但是我只需要打印一次。
例如,如果输入:
7 1 1 2 1 2 2 9
它应该打印
1 2
如果没有重复的数字:
7 1 2 3 4 5 6 7
不应有任何输出!
还要注意,第一个数字是array
的长度:
#include <iostream>
int main()
{
unsigned size;
std::cin >> size;
int* myArray = new int[size];
for (int i = 0; i < size; i++) {
std::cin >> myArray[i];
}
for (int i = 0; i < size; i++) {
bool found = false;
for (int j = 0; j < i && !found; j++) {
found = (myArray[i] == myArray[j]);
}
if (!found) {
std::cout << myArray[i] << " ";
}
}
delete []myArray;
}
解决方法
最简单的方法可能是使用set
,但是我不确定“不能使用其他库”规则是否允许。
仅使用数组,对于每个项目,您可以遍历之前的所有项目,并且仅在未找到的情况下打印它:
for (int i = 0; i < size; i++) {
bool found = false;
for (int j = 0; j < i && !found; j++) {
found = (myArray[i] == myArray[j]);
}
if (!found) {
cout << myArray[i] << " ";
}
}
,
第一个重复出现的数字在它之前没有出现,在它之后至少一个没有出现。
这很容易检测到:
for (int i = 0; i < size; i++) {
bool before = false;
for (int j = 0; j < i && !before; j++) {
before = myArray[i] == myArray[j];
}
if (!before) {
bool after = false;
for (int j = i + 1; j < size && !after; j++) {
after = myArray[i] == myArray[j];
}
if (after)
{
cout << myArray[i] << " ";
}
}
}
,
我将使用计数器基本上执行相同的操作,但是使用一个变量,而不是另一个用户建议的两个布尔。诀窍是检查您之前是否已经拥有正在检查的号码,这样您就不会再次打印它了。 然后检查列表的其余部分是否重复。
#include <iostream>
int main()
{
unsigned size;
std::cin >> size;
int* myArray = new int[size];
for (int i = 0; i < size; i++) {
std::cin >> myArray[i];
}
for (int i = 0; i < size; i++) {
int count = 0;
//check if the number has already been found earlier
for (int j = 0; j < i && !count; j++) {
if(myArray[i] == myArray[j]) count++;
}
//check the rest of the array for the repeated number
if (!count) {
for (int j = i; j < size; j++) {
if(myArray[i] == myArray[j]) count++;
}
}
//print if repeated
if (count > 1) {
std::cout << myArray[i] << " ";
}
}
delete []myArray;
}