[2階]3.124カ国の数、最大数、最大数を作成


以下のすべての問題はプログラマから提供されています.ありがとうございます.
  • はすべて解けます.
  • 1.124カ国の数字


    問題の説明


    124カ国あります124カ国では、数字は10進数ではなく、以下の独自のルールで表されています.
  • 124カ国には自然水しか存在しない.
  • 124国/地域は、すべての数字を表すときに1,2,4しか使用しません.
  • たとえば、124の国で使用される数値は、次のように変換されます.

    自然数nをパラメータとして指定した場合、解関数を完了し、nを124カ国で使用した数値に置き換えた値を返します.

    に答える

    #include <string>
    #include <vector>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    string solution(int n) {
        string answer = ""; 
        int share = n;
        int remainder = -1;
    
        while (share!=0) {
            remainder = share % 3;
            share = share / 3;
            if (remainder == 0) {
                answer = "4" + answer;
                share--;
            }
            else if (remainder == 1) {
                answer = "1" + answer;
            }
            else if (remainder == 2) {
                answer = "2" + answer;
            }
        }
    
          return answer;
    }

    説明:

  • 124カ国の価格は3文字124で表され、3進数と似ている.
  • ですので、3進数を3で割ると、残りの値が
  • と表示されます.
  • 124カ国を例にとると、124という数字がリストされています.
  • 2.最大数量


    問題の説明


    0または正の整数を指定すると、最大の整数を見つけます.
    例えば、与えられた整数が[6,10,2]である場合、最大数が6210である[610261010621026102106]を作成することができる.
    パラメータに指定された配列番号が0または正の整数の場合、作成可能な最大番号を文字列に変換して戻すソリューション関数を作成します.

    せいげんじょうけん

  • numbersの長さは100000より大きい.
  • numbersの要素は1000を超えません.
  • 答えが大きすぎるかもしれませんが、文字列を変えて返してください.
  • I/O例



    に答える

    #include <string>
    #include <vector>
    #include <algorithm>
    using namespace std;
    
    bool compare(string a, string b)
    {
        int tmp1, tmp2;
        tmp1 = stoi(a + b);
        tmp2 = stoi(b + a);
        if (tmp1 > tmp2)
            return (1);
        return (0);
    }
    
    string solution(vector<int> numbers) {
        string answer = "";
        vector<string> tmp;
        for(int i = 0; i < numbers.size(); i++)
        {
            tmp.push_back(to_string(numbers[i]));
        }
        sort(tmp.begin(), tmp.end(), compare);
        for (int i = 0; i < tmp.size(); i++)
        {
            answer += tmp[i];
        }
        if(answer[0] == '0')
            answer = "0";
        return answer;
    }

    説明:

  • はこの問題に初めて順番にアクセスした.
  • 題ではnumbersの要素の長さも多く,文字列も長く,実行タイムアウトが発生した.
  • 最大値
  • を求めるために,文字列を整数にまとめて比較する方法を採用した.
  • 3.大きい数を作成


    問題の説明


    ある数字からk個の数字を削除しようとしたときに得られる最大の数字を取得しようとします.
    たとえば、2つの数字が1924から削除された場合、[19,12,14,14,92,94,24]を作成することができる.このうち最大の数字は94です.
    解関数のパラメータとして文字列形式で与えられた数値と削除する数値kを用いる.solution関数を完了し、numberからk個の数値を削除したときに作成できる最大数値を文字列で返します.

    せいげんじょうけん

  • は、1桁より大きく、100000桁未満の数字です.
  • kは、1または複数のビット数未満の自然数である.
  • I/O例



    に答える

  • に戻る文字数を残し、その先頭から最大の数字を1つ選びますので、インデックスに注意してfor文を繰り返します.