解决在 c 中查找和计算重复项时遇到运行时错误

Facing Runtime error while Solving finding and counting duplicates in c

有人可以帮我解决这个问题吗?我遇到了运行时错误。 我首先定义了整数,然后使用 scanf 获取输入。 然后我检查数组的 2 个连续元素是否相等。 如果它们相等,我将 j 变量等同于 i+1,这样它就可以遍历并查找相同的重复元素是否并排(例如 - 15 15 15)。 我递增 j 元素直到 a[j] 等于 a[i]。 然后使用 i 尝试打印出现次数为 j-i 的数字,然后用 j-1 的 vakue 为 i 赋值。

#include <stdio.h>
int main()
{
    int n,j=0,i;
    scanf("%d",&n);
    int a[n];
    for (i = 0; i < n; ++i) {
        scanf("%d",&a[i]);
    }
    for (i = 0; i < n - 1; ++i)
    {
        if(a[i]==a[i+1])
        {
            j=i+1;
            while(j<n && a[i]==a[j])
            {
                j++;
            }
            printf("%d is appearing %d times\n",a[i],j-i);
        }
        i=j-1;
    }
    return 0;
}

问题是由行造成的,

i=j-1;

连续两个元素不相等的情况

在if条件内移动它。

需要先对输入数组进行排序以计算重复项,需要修复循环逻辑以重新分配索引i

固定代码可能是这样的:

#include <stdio.h>
#include <stdlib.h>
static int cmp_intp(const void *p1, const void *p2) {
  return *(const int *)p1 > *(const int *)p2;
}
int main() {
  int n, j = 0, i;
  scanf("%d", &n);
  int a[n];
  for (i = 0; i < n; ++i) {
    scanf("%d", &a[i]);
  }
  qsort(a, n, sizeof(a[0]), cmp_intp);
  for (i = 0; i < n;) {
    if (i < n - 1 && a[i] == a[i + 1]) {
      j = i + 1;
      while (j < n && a[i] == a[j]) {
        j++;
      }
      printf("%d is appearing %d times\n", a[i], j - i);
      i = j;
    } else {
      ++i;
    }
  }
  return 0;
}