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

C++で各桁の数字の合計が偶数となるn番目の数を求める方法


問題の概要

2で余りなく割り切れる整数は「偶数」と呼ばれます。本記事では、数値nが与えられたときに、「各桁の数字の合計が偶数となるn番目の数」を求める方法を解説します。各桁の合計が偶数となる最初の5つの数は、2、4、6、8、11です。具体的な例を見てみましょう。

入力 : n = 5
出力 : 11
説明 : 各桁の合計が偶数となる最初の5つの数は 2, 4, 6, 8, 11 であり、5番目の数は 11 です。

入力 : n = 12
出力 : 24

解決策へのアプローチ

ここからは、この問題を解くための2つの異なる手法について詳しく見ていきます。

単純なアプローチ(ナイーブ法)

n番目の数を求める最もシンプルな方法は、1から順に数値を走査し、それぞれの数値について各桁の合計が偶数かどうかを確認することです。偶数であればカウンターを1ずつ増やしていき、カウンターの値がnと等しくなった時点での数値が答えとなります。

効率的なアプローチ

より効率的な方法としては、まず各桁の合計が偶数となる初期の数値を観察し、そこから規則性(パターン)を見つけ出すことで答えを導きます。該当する最初の20個の数は、2, 4, 6, 8, 11, 13, 15, 17, 19, 20, 22, 24, 26, 28, 31, 33, 35, 37, 39, 40 です。これらの数を分析すると、nの一の位が0〜4の場合は n番目の数は 2*n となり、一の位が5〜9の場合は (2*n + 1) となるという規則性が見えてきます。

コード例

#include <bits/stdc++.h>
using namespace std;
int main () {
   long long int n = 13;
   long long int result;
   // n の一の位を取得
   int last_digit = n % 10;
   // 一の位が 0〜4 の範囲内かどうかを判定
   if (last_digit >= 0 && last_digit <= 4)
      result = 2 * n;
      // 一の位が 5〜9 の範囲内かどうかを判定
   else
      result = (2 * n) + 1;
   cout << "各桁の合計が偶数となるn番目の数: " << result;
   return 0;
}

出力

各桁の合計が偶数となるn番目の数: 26

コードの解説

  • まずnの一の位を求め、それが0以上4以下の範囲にあるかどうかを判定します。該当する場合は、答えとして 2*n をresult変数に格納します。
  • 上記に該当しない場合は、一の位が5以上9以下の範囲にあるかどうかを判定します。該当する場合は、答えとして 2*n + 1 をresult変数に格納します。
  • 最後に、result変数に格納された「各桁の合計が偶数となるn番目の数」を出力します。

まとめ

本記事では、各桁の数字の合計が偶数となるn番目の数を求める方法について解説しました。この問題は、記事で紹介した2つのアプローチのいずれによっても解くことができます。さらに、同じ問題を解くためのC++のコードも実際に実装しました。なお、このロジックはC、Java、Pythonなど他のプログラミング言語でも同様に実装可能です。本記事が皆様の学習のお役に立てれば幸いです。

  1. C++でN番目の五角錐数を求める方法を解説

    五角錐数とは五角錐数(Pentagonal Pyramidal Number)とは、五角形を底面として積み上げたピラミッドに含まれる物体の総数を表す数です。まず、下図のようにいくつかの五角数を確認してみましょう。1からNまでの五角数の総和は、N番目の五角錐数と一致します。この記事では、N番目の五角錐数を求める方法について詳しく解説します。入力:N = 4出力:40説明:最初の4つの五角数 1, 5, 12, 22 の合計は 40 です。入力:N = 6出力:126説明:最初の6つの五角数 1, 5, 12, 22, 35, 51 の合計は 126 です。解法へのアプローチシンプルなアプローチ上

  2. C++で文字列の部分文字列の総数を求める方法を解説

    この記事では、与えられた文字列から作成できる空でない部分文字列の個数を求める方法について解説します。入力 : string = "moon" 出力 : 10 説明 : 部分文字列は m、o、o、n、mo、oo、on、moo、oon、moon の 10 個です。 入力 : string = "yellow" 出力 : 21解法のアプローチ文字列の長さを n とします。上の例からも分かるように、考えられるすべての部分文字列の個数を求めるには、長さ n、(n-1)、(n-2)、(n-3)、……2、1 の部分文字列の個数を順に加算していく必要があります。部分文