需要只打印一次重复的数字/C++

Need To Print Repeated Numbers Just Once / C++

不能使用库和其他方法。

如您所见,我的程序找到了重复的数字并打印出来,但我只需要打印一次。

例如输入:

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;
}