C++でN桁の最大の偶数と奇数を求める方法
このチュートリアルでは、C++を使ってN桁の数値の中から最大の偶数と奇数を求めるプログラムを作成します。一見複雑に思える問題ですが、実は非常にシンプルな数学的な性質を利用することで、効率的に解くことができます。
解法の考え方
N桁の最大の数は、すべての桁が9で埋められた数値です。この性質を利用すると、以下の手順で偶数と奇数をそれぞれ求められます。
- 桁数 n を初期化します。
- 最大の奇数は
pow(10, n) - 1で求められます(例:n=3なら999)。 - 最大の偶数は、その奇数から1を引いた値、つまり
odd - 1になります(例:n=3なら998)。
すべての桁が9の数値は必ず奇数になるため、そこから1を引けば自動的に最大の偶数が得られるという仕組みです。
サンプルコード
それでは、実際のコードを見てみましょう。
#include <bits/stdc++.h>
using namespace std;
void findEvenAndOddNumbers(int n) {
int odd = pow(10, n) - 1;
int even = odd - 1;
cout << "Even: " << even << endl;
cout << "Odd: " << odd << endl;
}
int main() {
int n = 6;
findEvenAndOddNumbers(n);
return 0;
}実行結果
上記のコードを実行すると、以下の出力が得られます。
Even: 999998 Odd: 999999
n = 6 の場合、6桁の最大の奇数は999999、最大の偶数は999998となり、期待どおりの結果が確認できます。
まとめ
このように、N桁の最大の偶数・奇数を求める問題は、べき乗計算と簡単な減算だけで解決できます。計算量はO(1)であり、非常に効率的なアプローチです。同様のパターンは「最小のN桁の数」など他の問題にも応用できるので、ぜひ覚えておきましょう。
チュートリアルについて質問がある場合は、コメント欄でお気軽にお尋ねください。
-
C++で配列の偶数・奇数インデックス要素の絶対差を求める方法
この記事では、配列内の偶数インデックスと奇数インデックスにある要素の絶対差を求める方法を解説します。絶対差とは、2つの値の差が負になった場合にも絶対値を取ることを指します。 例として、配列 {1, 2, 3, 4, 5, 6, 7, 8, 9} を考えてみましょう。インデックスは0から始まるため、各要素は次のように分類されます。 偶数インデックス(0, 2, 4, 6, 8)の要素:1, 3, 5, 7, 9奇数インデックス(1, 3, 5, 7)の要素:2, 4, 6, 8 計算の手順 まず初期値0から出発し、該当するインデックスの要素を順番に見ながら、直前の累積値との差の絶対値を求めていき
-
Pythonでリスト内の偶数と奇数をカウントする3つの方法を解説
この記事では、リスト内に含まれる偶数と奇数の個数を数える方法について、具体的なコード例とともに解説します。問題の概要課題: 与えられたリストの中から、偶数と奇数がそれぞれいくつ含まれているかをカウントします。ここでは、以下の3つのアプローチを紹介します。それぞれ特徴が異なるため、用途やコードの可読性に応じて使い分けるのがおすすめです。方法1:forループを使った基本的な方法(総当たり方式)最もシンプルで直感的な方法です。拡張forループで各要素を順番に確認し、2で割った余りによって偶数か奇数かを判定します。コード例list1 = [21, 3, 4, 6, 33, 2, 3, 1, 3, 76