【发布时间】:2020-11-12 13:41:53
【问题描述】:
我正在尝试搜索一个数组并打印出其中唯一没有一对的数字,因此在本例中为“4”。
结果一直显示为 2,所以即使我觉得我的逻辑是正确的,但我肯定忽略了一些东西。
我一直在尝试解决这个问题,但一直卡住
非常感谢。
代码如下:
int main(){
int arr[] = {1, 1, 2, 2, 3, 3, 4};
int n = sizeof(arr)/sizeof(*arr);
int foundNum = 0;
int counter = 0;
while(counter !=n) {
int i = 0;
if (arr[i] != arr[i + 1]) {
foundNum = arr[i];
} else {
arr[i] = arr[i+2];
}
counter += 1;
}
std::cout << foundNum;
return 0;
}
【问题讨论】:
-
你的逻辑在我看来完全错误。你不更新
i。是否打算更新数组?看来您应该先用简单的语言(如英语)解释如何完成任务,然后编写代表您的解释的代码。 -
如果你的目标是“搜索”,那么你想通过修改数组来达到什么目的?
-
第一个迭代器:
arr[0] == arr[1],所以arr[i] = arr[i+2]被执行,arr[0]被设置为2(arr[2]) 第二个迭代器和更高版本:arr[0] != arr[1],所以foundNum = arr[i]是已执行并将foundNum设置为2(arr[0])。 -
嗨,迈克,感谢您的回复。我只想在数组中搜索一个元素与其旁边的元素进行比较,如果它们相同,则移动到下一个数字,即 I + 2 个位置,如果没有匹配,则再次执行相同操作数字,将其设置为foundNum,然后将其作为输出
-
"arr[i] = arr[i+2];"不会“移动到下一个数字”。在我看来,这里需要做什么is have the shown code reviewed by your rubber duck,然后按照你的橡皮鸭的指示。
标签: c++ arrays algorithm logic