代码的问题在于,您需要重新处理已经处理过的数字.因此,如果在位置0处出现1,在位置5处再次发生1,那么当您到达循环中的位置时,将再次在位置5处理1.
因此,您需要一种确定号码是否已被处理的方法.一种简单的方法是添加第二个数组(最初所有值都设置为0),并且每当处理一个数字时,都标记该元素出现的所有位置.现在,在处理元素之前,请检查是否已经处理过,如果是这样,则不执行任何操作.
另外,尝试正确缩进代码:)
C代码:
int main( void ) {
const int N = 10;
int A[N];
for(int i = 0; i < N; i++)
cin >> A[i];
int seen[N];
for(int i = 0; i < N; i++)
seen[i] = 0;
for(int i = 0; i < N; i++) {
if(seen[i] == 0) {
int count = 0;
for(int j = i; j < N; j++)
if(A[j] == A[i]) {
count += 1;
seen[j] = 1;
}
cout << A[i] << " occurs " << count << " times" << endl;
}
}
return 0;
}