【问题标题】:How to compare the elements on two arrays on C++如何在 C++ 上比较两个数组上的元素
【发布时间】:2021-05-29 08:29:04
【问题描述】:

我必须确定用户是否击中目标的 c++ 问题。输入敌人可能所在的坐标后,用户输入更多坐标,我必须比较它们,如果攻击的元素 [i] 与敌人 [n] 的任何元素匹配,则打印 YES。我知道我在比较位置而不是元素,这就是为什么它不起作用但我迷路了。我也尝试通过只制作一个数组来解决它,但这样感觉更好。

    #include <iostream>
    using namespace std;

    int main()
    {
    int n, k, b;
    int enemies[];
    int attacks[];
    
    cin>>n;
    for (int i=0; i<n; i++) {
        cin>>b;
        enemies[i]=b;
    }
    
    cin>>k; 
    for (int i=0; i<k; i++) {
        cin>>b;
        atacks[i]=b;
    }
    
    for(int i=0; i<k; i++){
       if(atacks[i]==enemies[i]){
                cout<<"YES"<<endl;
       }
       else{
           cout<<"NO"<<endl;
       }
    
    return 0;
}

【问题讨论】:

  • 除了 drescherjm 提到的不正确数组之外,您可以将每次攻击与所有敌人进行比较,看看它是否与一个简单的 O(n*k) 解决方案相匹配。
  • 谢谢我实际上将它更改为 int faces[10001] 并且与 atacks 相同,因为问题设置了该限制。
  • 如果攻击坐标以相同的顺序输入,由于您使用的是普通数组,您可以使用memcmp() 有效地比较每个数组中固定数量的字节。如果它们没有任何固定的顺序 - 你会被困在迭代每个元素。
  • @drescherjm:我不同意。就目前而言,我有理由确定它根本不应该编译(至少对于 g++、clang++ 或 VC++,它不会)。

标签: c++ arrays c++11


【解决方案1】:

您的代码可能不起作用,因为这行:

if(atacks[i]==enemies[i])

要求匹配的attackenemy 在它们的数组中应该有相同的索引。

按照 cmets 中的建议,您需要为每个 attack 迭代 ALL enemies,即“O(n*k) 解决方案”

【讨论】:

  • 这通常写为 O(nm) 解决方案。在大 O 表示法中,k *通常用来表示一个常数(所以O(n * k)O(n) 完全相同)。
  • @JerryCoffin - 同意;我只是引用了上面的其中一个 cmets :)
猜你喜欢
  • 1970-01-01
  • 2016-06-19
  • 1970-01-01
  • 2011-01-13
  • 2021-08-08
  • 1970-01-01
  • 2021-05-06
  • 2017-08-29
  • 1970-01-01
相关资源
最近更新 更多