C ++中数组中具有相等元素的索引对的计数
给我们一个由N个元素组成的数组。目的是找到具有相同元素值的索引对(i,j),使得i!=jie,Arr[i]=Arr[j]和i!=j。这用于制作大小相同的手套。在N手套中,只有成对的手套才有用。
我们将通过运行两个循环,其中0<=i<n-1和i<j<n来做到这一点。如果Arr[i]==Arr[j]&&Arr[i]>0&&Arr[j]>0,并且i!=j,则对每对(i,j)进行比较。如果为true,则增加此类对的计数,并将这些元素设置为-1(Arr[i]=Arr[j]=-1),以将其从进一步检查中移除,因为没有手套可以具有-1号。
让我们通过示例来理解。
输入−Arr[]={4,3,2,1,2,4}N=6
输出-具有相等元素的索引对的计数-2
说明-
count=0, Arr[]= [ 4,3,2,1,2,4 ] Arr[0]=Arr[5], 0!=5, count=1 Arr[0]=Arr[5]=-1 → [ -1,3,2,1,2,-1 ] Arr[2]=Arr[4], 2!=4, count=2 Arr[2]=Arr[4]=-1 → [ -1,3,-1,1,-1,-1 ] Now array has no new pairs with equal values, i!=j and > -1. Total pairs=2
输入−Arr[]={2,2,2,2,2}N=5
输出-具有相等元素的索引对的计数-2
说明-
count=0, Arr[]= [ 2,2,2,2,2 ] Arr[0]=Arr[1], 0!=1, count=1 Arr[0]=Arr[1]=-1 → [ -1,-1,2,2,2 ] Arr[2]=Arr[3], 2!=3, count=2 Arr[2]=Arr[3]=-1 → [ -1,-1,-1,-1,2 ] Now array has no new pairs with equal values, i!=j and > -1. Total pairs=2
以下程序中使用的方法如下
我们将一个整数数组Arr[]初始化为随机数,以确保手套的大小>0。
取一个变量n,它存储Arr[]的长度。
函数countPairs(intarr[],intn)接受一个数组,将其长度作为输入并返回大小相等且索引不同的对。
对数组中的每个元素使用两个for循环遍历数组。
外循环从0<=i<n-1,内循环i<j<n
检查arr[i]和arr[j]是否为正。如果arr[i]==arr[j],则递增计数。(根据循环中设置的条件,i永远不会等于j,无需进行比较)。
现在设置arr[i]=arr[j]=-1,以将其从进一步的比较中删除。
在所有循环的末尾,计数将具有手套的总数。
返回计数结果。
示例
// C++ implementation of above approach #include <bits/stdc++.h> using namespace std; //计数相等元素以制作手套的功能 int countPairs(int arr[], int n){ int count = 0; for(int i=0;i<n-1;i++){ for(int j=i+1;j<n;j++){ if(arr[i]==arr[j] && arr[i]>0 && arr[j]>0){ count++; arr[i]=arr[j]=-1; } } } return count; } int main(){ int arr[] = { 1,2,4,2,1,2,4 }; int n = sizeof(arr) / sizeof(arr[0]); cout <<"Pair of gloves ( Equal element pairs ):"<<countPairs(arr, n); return 0; }
输出结果
如果我们运行上面的代码,它将生成以下输出-
Pair of gloves ( Equal element pairs ):3.