只需打印一次重复的数字/ 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;
}