解决在 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;
}
有人可以帮我解决这个问题吗?我遇到了运行时错误。 我首先定义了整数,然后使用 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;
}