【发布时间】: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++,它不会)。