首页 > 解决方案 > 在 C 中的数组中已经计算过一次后,如何停止计算特定值的重复项?

问题描述

例如我有一个数组:

arr[9] = {1, 3, 4, 9, 2, 9, 2, 9, 7}

然后我对数组进行排序以获得

arr[9] = {1, 2, 2, 3, 4, 7, 9, 9, 9}

然后我使用两个 for 循环计算每个值的重复项。我想要的输出是:

2 instances of 2
3 instances of 9

相反,我得到:

2 instances of 2
3 instances of 9
2 instances of 9

我知道在循环进行一次之后,当arr[6]时,外循环计数还有两个 9但在完成之后,循环转到arr[7] ,外循环仍然计数还有另一个 9arr[8]所以我的问题是,当代码对数组中的每个数字进行一次重复计数时,如何停止代码。谢谢!

示例代码:

#define NUM = 9
int main() {
    arr[NUM] = {1, 3, 4, 9, 2, 9, 2, 9, 7};
    sort_int_array(arr, NUM); //insertion sort function

    int i, j, count=1;
    for (i=0; i<NUM; i++) {
        for (j=i+1;j<NUM; j++) {
            if (arr[i] == arr[j]) {
                count++;
            }
            if (arr[i] != arr[j] && count>1) {
                printf("%d instances of %d\n", count, arr[i]);
                count=1;
            }
        }
    }
}

标签: arrayscloopsfor-loopnested-loops

解决方案


找到答案了,谢谢大家帮忙。我只需要删除第二个 for 循环。

#define NUM = 9
int main() {
    arr[NUM] = {1, 3, 4, 9, 2, 9, 2, 9, 7};
    sort_int_array(arr, NUM); //insertion sort function

    int i, count=1;
    for (i=0; i<NUM; i++) {
        if (arr[i] == arr[i+1]) {
            count++;
        }
        if (arr[i] != arr[i+1] && count>1) {
            printf("%d instances of %d\n", count, arr[i]);
            count=1;
        }
    }
}

推荐阅读