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

【C++】LからRの範囲に含まれる偶数と奇数の個数を数える方法

整数値の範囲 L から R が与えられたとき、その範囲内に含まれる偶数と奇数がそれぞれ何個あるのかを求めるのがこの課題です。

入出力の例

入力: L = 7、R = 17
出力: 範囲 L から R に含まれる偶数の個数は 5、奇数の個数は 6

入力: L = 1、R = 10
出力: 範囲 L から R に含まれる偶数の個数は 5、奇数の個数は 5

解法の考え方

  • 範囲の始点 L と終点 R を受け取ります。
  • L と R の値を関数に渡して偶数の個数を数え、その戻り値をもとに奇数の個数を計算します。
  • i を L から R まで 1 ずつ増やしながら FOR ループを回します。
  • ループの中で i % 2 == 0 が成立する場合、偶数カウントを 1 増やします。
  • ループが終了したら、偶数カウントを返します。
  • 奇数の個数は、総要素数 (R − L + 1) から偶数の個数を引いて算出します。

サンプルコード

#include <iostream>
using namespace std;
int Odd_Even(int L, int R){
    int even = 0;
    for(int i = L; i <= R; i++){
        if(i % 2 == 0){
            even++;
        }
    }
    return even;
}
int main(){
    int L = 7, R = 17;
    int even = Odd_Even(L, R);
    int odd = (R - L + 1) - even;
    cout<<"Count of Even numbers in a range from L to R are: "<<even<<endl;
    cout<<"Count of Odd numbers in a range from L to R are: "<<odd;
    return 0;
}

実行結果

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

Count of Even numbers in a range from L to R are: 5
Count of Odd numbers in a range from L to R are: 6

処理の流れを確認

L = 7、R = 17 の場合、範囲内の総要素数は 17 − 7 + 1 = 11 個です。このうち偶数は 8、10、12、14、16 の 5 個なので、奇数は 11 − 5 = 6 個と求められます。

補足: O(1)で求める方法

上記の実装は範囲の幅に比例した O(N) の時間がかかりますが、偶数の個数は整数除算を用いた式 R / 2 − (L − 1) / 2 によって定数時間で求めることもできます。奇数の個数は総要素数から偶数の個数を引くだけでよいため、非常に広い範囲を扱う場合にはこちらの方法のほうが効率的です。

  1. C++で左右の偶数・奇数の出現回数が一致する配列インデックスを見つける方法

    問題の概要 ここで取り上げるのは次のような問題です。n個の要素を持つ配列が与えられたとき、「あるインデックスの左側にある偶数の出現回数と右側にある偶数の出現回数が等しい」、または「左側にある奇数の出現回数と右側にある奇数の出現回数が等しい」という条件を満たすインデックスを1つ見つけます。該当するインデックスが存在しない場合は -1 を返します。 例として、配列が {4, 3, 2, 1, 2, 4} の場合を考えてみましょう。このとき答えは 2 になります。インデックス2の要素は「2」であり、その左側には奇数が1つ(3)、右側にも奇数が1つ(1)しか存在しないためです。 解決のアプローチ こ

  2. Pythonでリスト内の偶数と奇数をカウントする3つの方法を解説

    この記事では、リスト内に含まれる偶数と奇数の個数を数える方法について、具体的なコード例とともに解説します。問題の概要課題: 与えられたリストの中から、偶数と奇数がそれぞれいくつ含まれているかをカウントします。ここでは、以下の3つのアプローチを紹介します。それぞれ特徴が異なるため、用途やコードの可読性に応じて使い分けるのがおすすめです。方法1:forループを使った基本的な方法(総当たり方式)最もシンプルで直感的な方法です。拡張forループで各要素を順番に確認し、2で割った余りによって偶数か奇数かを判定します。コード例list1 = [21, 3, 4, 6, 33, 2, 3, 1, 3, 76