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

C++で0が偶数個含まれるN桁の数を数える方法


整数Nが入力として与えられ、「各桁に現れる0の個数が偶数個であるN桁の数」が全部でいくつあるかを求めるのがこの問題の目的です。ここで扱う数には先頭の0も含まれます。たとえばN=3の場合、001、002、003…010…といった数もすべて対象になります。

具体例で理解する

入力例1

入力:N=4

出力:0が偶数個含まれるN桁の数の個数は 7047

説明:4桁のすべての数は次のようになります。

最小値は0000、その次は0011、0012、0013、0014……と続き、最大値は9900です。

入力例2

入力:N=5

出力:0が偶数個含まれるN桁の数の個数は 66383

説明:5桁のすべての数は次のようになります。

最小値は00001、その次は00002、00003、00004……と続き、最大値は99900です。

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

まず、N桁の数の総数Tを求めます。これは T = 10N − 1 です(000…0という0のみの並びを除外します)。次に、0が奇数個含まれるN桁の数の個数Oを O = 10N − 8N として計算します。すると、求めたい「0が偶数個含まれる数」の個数は残りの T − O ÷ 2 で表せます。

補足すると、各桁に入る数字は0〜9の10通りなので、長さNの数字列全体は10N通り存在します。二項定理から、0が偶数個含まれる列の数は (10N + 8N) ÷ 2、奇数個含まれる列の数は (10N − 8N) ÷ 2 と導けます。コードでは計算の都合上、奇数側を10N − 8Nとして求めておき、後から2で割る形にしています。

アルゴリズムの手順

  • 整数Nを入力として受け取ります。
  • 関数count_even(int N)がNを受け取り、0が偶数個含まれるN桁の数の個数を返します。
  • N桁の数の総数は total = pow(10, N) - 1 で求めます。
  • 0が奇数個含まれるN桁の数の総数は odd = pow(10, N) - pow(8, N) で求めます。
  • 残りの0が偶数個含まれる数は even = total - odd / 2 で求めます。
  • evenを「0が偶数個含まれるN桁の数の個数」として返します。

実装例(C++)

#include <bits/stdc++.h>
using namespace std;
int count_even(int N){
    int total = pow(10, N) - 1;
    int odd = pow(10, N) - pow(8, N);
    int even = total - odd / 2;
    return even;
}
int main(){
    int N = 3;
    cout<<"0が偶数個含まれるN桁の数の個数: "<<count_even(N);
    return 0;
}

出力

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

0が偶数個含まれるN桁の数の個数: 755

  1. 【C++】Dで割り切れるN桁の数を見つけるアルゴリズム

    2つの整数 N と D が与えられたとき、D で割り切れる N 桁の数を見つける問題を考えます。例えば、N = 3、D = 5 の場合、答えは 500 になります。一見難しそうに思えるこの問題ですが、実はとてもシンプルな発想で解決できます。解法のアイデア基本となる考え方は、「D を先頭に置き、その後ろに 0 を付け足して N 桁にする」というものです。D の桁数を m とすると、D の末尾に (N − m) 個の 0 を連結した数は、全体でちょうど N 桁となり、必ず D で割り切れます。これは、作成される数が D × 10(N−m) に相当し、10 のべき乗を掛けても D で割り切れるという

  2. Pythonで偶数桁の数字を数える方法

    数値のリストが与えられたとき、桁数が偶数である数字の個数を数える問題を考えてみましょう。 例えば、配列が [12, 345, 2, 6, 7896] の場合を想定します。「12」は2桁、「7896」は4桁なので桁数が偶数です。一方、「345」「2」「6」は桁数が奇数のため対象外となります。したがって、この場合の出力は 2 になります。 解決のアプローチ この問題は、以下の手順でシンプルに解くことができます。 リストを受け取り、各整数を文字列に変換する 変換後の文字列の長さ(=桁数)が偶数であれば、カウントを1つ増やす すべての要素を処理したら、最終的なカウント値を返す 実装例 それでは、