C++
 Computer >> コンピューター >  >> プログラミング >> C++

C++でarr[i]*arr[j] > arr[i]+arr[j]を満たすペア(i, j)の個数を数える方法

正の整数からなる長さnの配列が与えられます。この問題の目的は、arr[i]*arr[j] > arr[i]+arr[j] かつ 0≦i<j<n を満たす順序付きペア(i, j)の個数を数えることです。ここで、nは配列内の要素数を表します。

2つのforループを使って配列を走査し、各ペアについて調べていきます。それぞれのペアに対してarr[i]とarr[j]の和と積を計算し、積が和より大きければカウントを1つ増やします。

具体例で確認してみましょう。

入力 − Arr[]= { 1,1,2,3 } N=4

出力 − ペアの個数 − 1

説明 − 条件を満たす唯一のペアは(2,3)です。

2*3=6 > 2+3=5

入力 − Arr[]= { 2,2,2 } N=3

出力 − ペアの個数 − 0

説明 − 2*2も2+2もどちらも4になるため、積が和より大きくなるペアは存在しません。

本プログラムで使用するアプローチ

  • 正の整数で初期化された整数型配列arr[]を用意します。

  • Arr[]の長さを格納する変数nを定義します。

  • 関数countPairs(int arr[], int n)は、配列とその長さを引数として受け取り、積が和より大きくなるペアの個数を出力します。

  • ペアを構成する各要素について、2つのforループを使って配列を走査します。

  • 外側のループは0≦i<n−1、内側のループはi<j<nの範囲で繰り返します。

  • arr[i]*arr[j]>arr[i]+arr[j]という条件を判定し、真であればカウントを増やします。

  • すべてのループが終了した時点で、countには積が和より大きいペアの総数が格納されています。

  • 結果としてcountを返します。

コード例

#include <bits/stdc++.h>
#include <math.h>
using namespace std;
int countPairs(int arr[], int n){
    int count=0;
    int sum=0;
    for(int i=0;i<n-1;i++){
        for(int j=i+1;j<n;j++){
            if(arr[i]*arr[j]>arr[i]+arr[j]) //条件判定
                { count++; }
        }
    }
    return count;
}
int main(){
    int arr[] = { 1,2,3,2 };
    int len = sizeof(arr) / sizeof(int);
    cout<<"Count of number of pairs :"<<countPairs(arr, len);
    return 0;
}

出力

上記のコードを実行すると、次の出力が得られます −

Count of number of pairs :2
  1. C++で数を割り切る桁の個数を求める方法

    問題の概要ある整数が与えられたとき、その数を割り切る桁(各桁の数字)の個数を数える問題です。例として、数が 1012 の場合を考えてみましょう。この場合、答えは 3 となります。1、1、2 の3つの桁がそれぞれ 1012 を割り切れるためです。解法のアプローチこの問題を解くには、剰余演算(% 演算子)を使って数の各桁を1つずつ取り出し、元の数がその桁の値で割り切れるかどうかを判定します。割り切れる場合はカウンターを1つ増やします。なお、桁が 0 の場合は 0 で割ることができないため、その桁はスキップ(無視)します。アルゴリズムの流れ元の数のコピーを作成し、0 になるまでループを繰り返します。

  2. C++でXORが0になる配列内のペアの数を求める方法

    n個の要素を含む配列が与えられたとき、XOR(排他的論理和)の計算結果が0になるペアの数を求めることを考えます。ペア(x, y)のXORが0になるのは、x = y が成り立つ場合、すなわち2つの値が等しいときだけです。これは「同じ数値同士のXORは必ず0になる」というビット演算の基本的な性質によるものです。解法のアプローチこの問題は、次の手順で解くことができます。まず、配列を昇順にソートします。ソート後は同じ値どうしが隣り合って並ぶため、連続する2つの要素を比較し、等しければカウントを1つ増やします。すべての要素が同じ値である場合、末尾側のペアがカウントから漏れる可能性があります。そこで、配列