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

与えられた数値を並べ替えて最大の数を作る方法|C++での実装例


この記事では、与えられた複数の数値を並べ替えて、可能な限り大きな数を作る方法を解説します。例えば、{45, 74, 23} という3つの数値が与えられた場合、プログラムは最大の数「744523」を出力します。ここで重要なのは、各桁の数字をバラバラに並べ替えるのではなく、数値そのものをひとまとまりの単位として配置するという点です。

この問題を解くには、数値を文字列として扱い、ソートを行います。ただし、通常の大小比較とは異なる独自の比較ロジックを使用します。比較関数は2つの数値 a と b を受け取り、それぞれを連結した「ab」と「ba」を生成し、どちらが大きいかを判定します。大きい方の組み合わせが先に来るように並べることで、全体として最大の数が得られます。

例えば「45」と「74」を比較する場合、「4574」と「7445」を作り、大きい方である「7445」を採用するため、「74」が先に並びます。

アルゴリズム

compareStrings(a, b)

begin
    ab := a に b を連結した文字列
    ba := b に a を連結した文字列
    ba と ab を比較し、ba の方が大きければ 1 を返す。そうでなければ 0 を返す
end

getLargest(arr)

begin
    compareStrings() を比較関数として使い、arr をソートする
    arr 内の各文字列 s に対して以下を実行する
        s を出力する
    繰り返し終了
end

C++による実装例

#include<iostream>
#include<string>
#include<vector>
#include<algorithm>
using namespace std;

int stringCompare(string a, string b) {
    string ab = a + b;
    string ba = b + a;
    return ab.compare(ba) > 0 ? 1 : 0;
}

void getLargest(vector<string> arr) {
    sort(arr.begin(), arr.end(), stringCompare); // 配列をソート
    for (int i = 0; i < arr.size(); i++)
        cout << arr[i];
}

int main() {
    vector<string> arr;
    arr.push_back("45");
    arr.push_back("74");
    arr.push_back("23");
    getLargest(arr);
}

出力結果

744523

解説

この比較ロジックのポイントは、連結した結果そのものを比較することで、桁数が異なる数値同士でも正しい順序を決定できる点にあります。単純に数値の大小や辞書順で比較すると、意図しない順序になってしまうことがありますが、連結結果を比較する方式なら、例えば「3」と「30」の場合も「330」と「303」を比べて正しく判断でき、常に最大の数を構成できます。


  1. セットを使って文字列内の母音の数をカウントするPythonプログラム

    本記事では、Pythonを使って文字列内に含まれる母音の数をカウントする方法について解説します。セット(set)を活用した効率的な実装を中心に、初心者の方にもわかりやすく説明していきます。 問題の概要 問題文:任意の文字列が与えられたとき、その文字列に含まれる母音の数をセットを使って数えます。 基本的なアプローチとしては、文字列全体を先頭から順に走査し、各文字が母音であるかどうかを判定します。母音であればカウントを1ずつ増やしていき、最終的な合計を出力します。 実装例 def vowel_count(str_): count = 0 # 母音をセットとして定義 vowe

  2. Pythonのsetを使って文字列内の母音の数をカウントする方法

    この記事では、ユーザーが入力した文字列に含まれる母音の数をカウントするPythonプログラムを紹介します。母音の判定にはset(セット)を使用します。setとは、順序を持たないコレクション型のデータ構造です。反復処理が可能で、要素の追加や削除による変更もできますが、重複した要素は保持されません。さらに、setは内部的にハッシュテーブルで実装されているため、特定の要素が含まれているかどうかの判定(in演算子)を高速に行えるという大きな特徴があります。実行例 入力 : str1 = pythonprogram 出力 : 3 アルゴリズム ステップ1: 母音を数えるためのカウンター変数を用意します。