给我们一个由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(int arr [],int n)接受一个数组,将其长度作为输入并返回大小相等且索引不同的对。
对数组中的每个元素使用两个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.