C++ 中陣列中元素相等的索引對計數
給定一個包含 N 個元素的陣列。目標是找到索引對 (i,j),它們具有相同的元素值,且 i!=j。即,Arr[i]=Arr[j] 且 i!=j。這用於配對相同尺寸的手套。在 N 副手套中,只有配對的手套才能出售。
我們將透過執行兩個迴圈來做到這一點,其中 0<=i<n-1 和 i<j<n。比較每一對 (i,j) 是否 Arr[i]==Arr[j] && Arr[i]>0 && Arr[j]>0,以及 i!=j。如果為真,則增加此類對的計數,並將這些元素設為 -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,以將其從進一步的比較中移除。
在所有迴圈結束時,count 將包含手套對的總數。
將 count 作為結果返回。
示例
// C++ implementation of above approach
#include <bits/stdc++.h>
using namespace std;
// Function to count equal elements to make pair of gloves
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.
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP