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

C++で英語から元の数字を再構築する


0〜9の数字の順序が正しくない英語表現を含む空でない文字列があるとし、数字を昇順で出力します。いくつかのプロパティがあります-

  • 入力は有効であることが保証されており、元の数字に変換できます。つまり、「abc」や「zerone」などの無効な入力は許可されません。
  • 入力の長さが50,000未満です。

したがって、入力が「fviefuro」のような場合、出力は45になります。

これを解決するには、次の手順に従います-

  • nums:=0から9までの英語の文字の数字を保持している配列。
  • サイズ10の配列を1つカウントします
  • ans:=空の文字列。およびn:=文字列のサイズ。
  • 0からn– 1の範囲のiの場合、do
    • s [i] =‘z’の場合、count[0]を1増やします
    • s [i] =‘w’の場合、count[2]を1増やします
    • s [i] =‘g’の場合、count[8]を1増やします
    • s [i] =‘x’の場合、count[6]を1増やします
    • s [i] =‘v’の場合、count[5]を1増やします
    • s [i] =‘o’の場合、count[1]を1増やします
    • s [i] =‘s’の場合、count[7]を1増やします
    • s [i] =‘f’の場合、count[4]を1増やします
    • s [i] =‘h’の場合、count[3]を1増やします
    • s [i] =‘i’の場合、count[9]を1増やします
  • count [7]:=count [7] – count [6]
  • count [5]:=count [5] – count [7]
  • count [4]:=count [4] – count [5]
  • count [1]:=count [1] –(count [2] + count [4] + count [0])
  • count [3]:=count [3] – count [8]
  • count [9]:=count [9] –(count [5] + count [6] + count [8])
  • 0から9の範囲のiについては、
    • 範囲0のjからcount[i]
      • ans:=ans +文字(i + ‘0’)
  • 回答を返す

例(C ++)

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   string originalDigits(string s) {
      string nums[]= {"zero", "one", "two", "three", "four", "five", "six", "seven","eight", "nine"};
      vector <int> cnt(10);
      string ans = "";
      int n = s.size();
      for(int i = 0; i < n; i++){
         if(s[i] == 'z')cnt[0]++;
         if(s[i] == 'w') cnt[2]++;
         if(s[i] == 'g')cnt[8]++;
         if(s[i] == 'x')cnt[6]++;
         if(s[i] == 'v')cnt[5]++;
         if(s[i] == 'o')cnt[1]++;
         if(s[i] == 's')cnt[7]++;
         if(s[i] == 'f')cnt[4]++;
         if(s[i] == 'h')cnt[3]++;
         if(s[i] == 'i') cnt[9]++;
      }
      cnt[7] -= cnt[6];
      cnt[5] -= cnt[7];
      cnt[4] -= cnt[5];
      cnt[1] -= (cnt[2] + cnt[4] + cnt[0]);
      cnt[3] -= cnt[8];
      cnt[9] -= (cnt[5] + cnt[6] + cnt[8]);
      for(int i = 0; i < 10; i++){
         for(int j = 0; j < cnt[i]; j++){
            ans += (char)(i + '0');
         }
      }
      return ans;
   }
};
main(){
   Solution ob;
   cout << ob.originalDigits("fviefuro");
}

入力

"fviefuro"

出力

"45"

  1. C++の配列の数字から形成される2つの数値の最小合計

    説明 0から9までの値を含む数字の配列が与えられます。タスクは、配列の数字から形成される2つの数値の可能な最小の合計を見つけることです。指定された配列のすべての桁を使用する必要があることに注意してください 例 入力配列が{7、5、1、3、2、4}の場合、最小合計は382であるため、135と247の2つの数値を作成できます。 アルゴリズム 配列を昇順で並べ替えます 並べ替えられた配列から交互に、つまり偶数と奇数のインデックスから数字を選択して、2つの数値を作成します 例 #include <bits/stdc++.h> using namespace std; int get

  2. 元の価格と正味価格からGSTを計算するC++プログラム

    元のコストと正味価格を入力として与えられ、タスクはGSTパーセンテージを計算し、結果を表示することです GSTは、物品サービス税の略です。これは常に製品の正味価格に含まれており、GSTの割合を計算する前に、GSTの金額を計算する必要があります。そのために、利用可能な数式があります 正味価格=元のコスト+GSTAmount GSTAmount =Netprice – original_cost GST_Percentage =(GSTAmount * 100)/ originalcost GST%数式=(GSTAmount * 100)/元のコスト 例 Input-: cost =