gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 01:46:54 25 4
gpt4 key购买 nike

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

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

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com