从用户处获取大小为 N 的数组的输入,并打印重复元素的总数(出现两次或多次的元素)。
输入格式:第一行包含N,第二行包含N个正整数,以空格分隔。
输出格式:重复元素计数。
我编写的程序仅适用于两个相同的元素,并且无法读取超过 2 个重复项。
#include<stdio.h>
#include <stdlib.h>
int main()
{
int arr[1000],i,j,n,count=0;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
for(i=0;i<n;i++)
{
for(j=i+1;j<n;j++)
{
if(arr[i]==arr[j])
{
count=count+1;
break;
}
}
}
printf("%d",count);
}
输入(以八位数字为例):
1 2 3 1 2 1 5 6
此代码的输出不正确:
3
预期输出为 2,即具有重复项的元素计数(1 有两个重复项,2 有一个重复项)。
那么请解释一下我做错了什么?
最佳答案
您可以使用以下代码来实现相同的目的。它首先对数组进行排序:
#include<stdio.h>
#include <stdlib.h>
int main()
{
int arr[1000],i,j,n,count=0, min;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
for(i=0;i<n;i++)
{
min = i;
for(j=i+1;j<n;j++)
{
if(arr[min]>arr[j])
{
min = j;
}
}
{
int temp = arr[min];
arr[min] = arr[i];
arr[i] = temp;
}
}
for(i=1;i<n;i++)
{
if(arr[i]==arr[i-1])
{
count++;
while(arr[i]==arr[i-1]) i++;
}
}
printf("%d",count);
return 0;
}
关于arrays - 计算数组中重复元素的数量 - C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44756630/