c++ - 如何在 C++ 中对数组进行排序和检查重复项?

标签 c++ arrays sorting duplicates

我试图解决的问题是在用户向数组输入值时检查数组。具体说明是:使用单独的方法进行检查;该方法必须首先对数组进行排序;重复检查必须实时执行,这意味着用户不会先输入所有值,然后数组返回并检查它们。我环顾四周,虽然我已经弄清楚如何排序,但我完全困惑于如何在输入每个值时检查重复项。谁能插入我朝正确的思考方向前进?

这是我在作业范围内想到的:

void getLottoPicks(int numbers[])
{
    cout << "Please enter your 7 lotto number picks between 1 and 40: " << endl;

    for (int i = 0; i < SIZE; i++)
    {
        cout << "Selection #" << i + 1 << endl;
        cin >> numbers[i];
        while (numbers[i] < 1 || numbers[i] > 40)
        {
            cout << "Please choose a number between 1 and 40: " << endl;
            cin >> numbers[i];
        }
        for (int j = 0; j < i; j++)
        {
            while (numbers[i] == numbers[j])
            {
                cout << "You have already picked that number. Enter a different one: " << endl;
                cin >> numbers[i];
            }
        }
    }
}

它编译并运行时没有任何错误(无论如何,我还没有发现任何错误)。如果有人有任何反馈,我们将不胜感激。我知道这种算法效率非常低,但我们的数组只有 7 个值长,这正是我们所要求的。最初我认为必须对其进行排序,但只有当我们选择在不同的函数中进行检查时才需要进行排序。

最佳答案

您可以通过多种方式来做到这一点。

  1. 首先,如果您仅使用数组,请使用 std::sort 和 std::unique。

  2. 如果数组中的最大数字不是很大,可以维护一个 bool 数组,可以将其设置为 0。

       #include <cstring>
       bool a[100000];
       memset(a,0,sizeof a)
    
      main(){
      int x,i,arr[1000];
      while(cin>>x){
         if( a[x] == 0)
         arr[i++]=x,a[x]=1;
      }
    

在数组中输入值之前,检查该数字的 a 索引值是否为 0。
如果为 0,请输入数组中的值,标记 bool 数组的索引 1。 稍后您可以使用排序

      #include<algorithm>
      sort(arr,arr+(size of arr));

3.您可以维护一个集合来输入值,而不是数组,它将是一个二叉树,并且会丢弃任何重复的值,并且插入后的值将按排序顺序排列。

      #include <set>
       set <int> arr;
      main(){
        int x;
        while(cin>>x)
        a.insert(x);
      }

您可以使用像

这样的迭代器从集合中获取值
      set<int> :: iterator it;

关于c++ - 如何在 C++ 中对数组进行排序和检查重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20027656/

相关文章:

c++ - fatal error C1083 : Cannot open include file: 'opencv2/core.hpp' : No such file or directory

c++ - 双端队列错误

c++ - std::map 的排序是如何实现的?

c++ - STL map 排序

javascript - 对包含数字的 JavaScript 字符串数组进行排序

c++ - 读取带有分隔符的文本文件

c++ - 指向类中多维数组的指针

ArrayList.toArray() 中的 Java 泛型

c++ - 顺时针旋转二维数组

python - 按作为实例属性的值对字典进行排序