接受大小为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);
}
输入:n = 8
1 2 3 1 2 1 5 6
这里程序返回3而不是2,因为有3个重复(1 1 1)。 建议一些想法来避免这种情况...
预期的输出是2.具有重复的元素的数量(1具有两个重复,2具有一个重复)。 count(1,2)
答案 0 :(得分:0)
下面的Java程序花费的时间更少,并且非常灵活,根据x数组中的数字增加y数组的大小。
public void countDuplicates() {
int[] x = {1,2,3,4,5,9,1,0,9,1,1,2,4};
int[] y = new int[10];
for(int i =0 ; i< x.length ; i++) {
y[x[i]] = y[x[i]] + 1;
}
int c = 0;
for (int a:y) {
System.out.println(c+"---> "+a);
c++;
}
}
答案 1 :(得分:-1)
您可以使用以下代码。它首先对数组进行排序:
#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;
}
答案 2 :(得分:-1)
您可以使用此代码,它将代替元素的所有重复项写入-1,因此它将仅对具有重复项的元素计数一次。
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
cout << "Enter The Size of the Array ";
cin >> n;
int *a = new int[n];
cout << "Enter The Elements of the Array\n";
for(int i = 0; i < n; i++) cin >> a[i];
int count = 0;
bool duplicate = false;
for(int i = 0; i < n; i++){
duplicate = false;
if(a[i] == -1) continue;
for(int j = i+1; j < n; j++){
if(a[j] == a[i]) {
duplicate = true;
a[j] = -1;
}
}
if(duplicate) count++;
}
cout << count ;
return 0;
}