【发布时间】:2018-10-24 19:52:40
【问题描述】:
挑战在于编写一个删除数组重复值的程序。
#include <iostream>
using namespace std;
void func(int arrayA[], int n, int arrayB[]) {
int h = 0;
int count = 0;
arrayB[0] = arrayA[0];
for (int i = 1; i < n; i++) {
count = 0;
for (int j = 0; j < n; j++) {
if (arrayB[i] == arrayA[j]) {
count++;
}
}
if (count == 0) {
h++;
arrayB[h] = arrayA[i];
}
}
}
int main() {
int n;
cin >> n;
int arrayA[n];
int arrayB[n];
for (int i = 0; i < n; i++) {
cin >> arrayA[i];
}
func(arrayA, n, arrayB);
for (int i = 0; i < n; i++) {
cout << arrayB[i] << endl;
}
}
我的逻辑是创建一个新数组并用非重复值填充它,为此我创建了一个循环,当它找到重复值时将 1 添加到计数器,如果计数器等于 0,则添加该值。然后计数器重新启动。
感谢您对新程序员的帮助,我真的试图自己解决这个问题。
【问题讨论】:
-
int arrayA[n];不是有效的 C++ - 数组维度必须是编译时常量。 -
提示:做一个简单的输入来暴露不当行为。然后处理你的代码并建立一个期望表。您期望在每一行代码中发生什么?如果构建表格不会使错误松动,请使用调试器逐行执行程序,并注意程序在哪里执行了您未预料到的操作。赔率很好,这是一个错误,如果不是,那就是您的期望中的错误。在继续之前,两者都需要修复。
-
注意:如果要消除重复,
arrayB的有效内容很可能比arrayA少。 -
顺序重要吗?如果不是,则颠覆问题,将数据存储在一个集合中,然后输出。