所以我要做的是创建一个代码来查找数组中的数字对.当存在一对数字时,下面的代码可以很好地工作.
#include<stdio.h>
main()
{
int arr[10], i, j, pairs = 0;
int n;
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])
{
pairs++;
}
}
}
printf("%d", pairs);
}
我想做它,以便当有3个相同的元素时它可以工作.
例如,arr [5] = 1,1,1,2,2
它应该返回2对(1,1和2,2并留下额外的1)但它返回4对而不是我的代码!
谢谢.
最佳答案 在这里,您将逐个比较每个元素与其他元素,这就是为什么您得到答案为4.
要计算三个或三个以上的对,一种方法可能是对数组进行排序,然后计算该元素已发生的次数,如果频率大于2,则意味着它形成一对.
这是修改后的代码:
#include<stdio.h>
main()
{
int arr[10], i, j, pairs = 0,count=0,prev_element=0;
int n;
scanf("%d", &n);
for(i = 0; i<n; i++)
{
scanf("%d", &arr[i]);
}
// You need to sort the array here.
prev_element = arr[0];
count=1;
for(i = 1; i<n; i++)
{
if(prev_element==arr[i])
{
count++;
}
else
{
if(count>=2)
pairs+=count/2;
else
{
prev_element=arr[i];
count=1;
}
}
}
printf("%d", pairs);
}
这也将减少代码的时间复杂度.以前,时间复杂度为O(n2),但现在它也将变为O(n).
这里,首先计算每个元素发生的次数,如果出现的次数大于2,则元素将形成一对,否则不会.