#include <stdio.h>
#include<stdlib.h>
int main()
{
int *num=malloc(sizeof(int)*10);
int n,dup=0;
printf("Enter number of elements");
scanf("%d",&n);
printf("Enter numbers");
for(int i=0;i<n;i++)
{
scanf("%d",num+i);
}
for(int i=0;i<n;i++)
{
for(int j=1;j<n;j++)
{
if(*(num+i)==*(num+j))
{
dup++;
}
}
}
printf("%d",dup);
free(num);
return 0;
}
我正在尝试使用指针来查找元素重复的次数。但是我没有得到正确的输出。这段代码有什么问题? 编辑:对于输入1,2,3,我的输出为2。
答案 0 :(得分:2)
内循环是错误的,并且重复配对
for(int j = 1; j < n; j++)
将其更改为
for(int j = i + 1; j < n; j++)
您还应该将malloc
行进一步向下移动,并以输入为基础;
int *num = malloc(sizeof(int) * n);
答案 1 :(得分:1)
如果i
和j
相同,您将始终获得匹配。例如,如果元素2和3匹配,您还将获得重复的匹配项,因为您将2与3进行了对勾,并将3与2进行了对勾。要赶上它,请以j
而不是1开头的i
开始。 ,当您发现重复项时,您将希望跳出内循环,以便在有多个实例的情况下不要对它们进行多次计数。
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
if (*(num+i)==*(num+j))
{
dup++;
break;
}
}
}