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

C++での加算数


「0」から「9」までの数字のみを含む文字列があるとすると、それが加算数であるかどうかを判別する関数を作成する必要があります。加法番号は、数字が加法シーケンスを形成できる文字列です。有効な加算シーケンスには、少なくとも3つの数値が含まれている必要があります。ここでは、最初の2つの数字を除いて、シーケンス内の後続の各数字は、前の2つの数字の合計でなければなりません。したがって、入力が「112358」のような場合、2 =1 + 1、3 =1 + 2、5 =2 + 3、8 =3 + 5のように、答えは真になります。

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

  • ok()というメソッドを定義します。これには、s、index、prev1、prev2が必要です

  • index> =sのサイズの場合、trueを返します

  • req:=prev1 + prev2およびnum:=req as string

  • x:=1つの空白の文字列

  • 範囲インデックスからsのサイズまでのiの場合

    • x:=x + s [i]

    • x =numで、ok(s、i + 1、prev2、x as integer)の場合、trueを返します

  • falseを返す

  • メインの方法から、次のようにします-

  • n:=numのサイズ

  • 1からn–2の範囲のiの場合

    • 1からiの範囲のjの場合

      • s1:=0からj–1までのnumの部分文字列

      • s2:=jからiまでのnumの部分文字列– j

      • x:=s1サイズとs2サイズの最大値

      • x> n – iの場合、次の反復に進みます

      • (s1 [0]が0で、サイズがs1> 0)または(s2 [0]が0で、サイズがs2> 1)の場合、次の反復にスキップします

      • ok(num、i + 1、s1 as integer and s2 as integer)がtrueの場合、trueを返します

  • falseを返す

例(C ++)

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

#include <bits/stdc++.h>
using namespace std;
typedef long long int lli;
class Solution {
   public:
   bool ok(string s, int idx, lli prev1, lli prev2){
      if(idx >= s.size()) return true;
      lli req = prev1 + prev2;
      string num = to_string(req);
      string x = "";
      for(int i = idx; i < s.size(); i++){
         x += s[i];
         if(x == num && ok(s, i + 1, prev2, stol(x))) return true;
      }
      return false;
   }
   bool isAdditiveNumber(string num) {
      int n = num.size();
      for(int i = 1; i < n - 1; i++){
         for(int j = 1; j <= i; j++){
            string s1 = num.substr(0, j);
            string s2 = num.substr(j, i - j + 1);
            int x = max((int)s1.size(), (int)s2.size());
            if(x > n - i) continue;
            if((s1[0] == '0' && s1.size() > 1) || (s2[0] == '0' && s2.size() > 1)) continue;
            if(ok(num, i + 1, stol(s1), stol(s2))) return true;
         }
      }
      return false;
   }
};
main(){
   Solution ob;
   cout << (ob.isAdditiveNumber("112358"));
}

入力

"112358"

出力

1

  1. サイズdで作成できる十二角形の数をカウントするC++プログラム

    数dがあるとします。正方形のタイルと辺の長さが1の通常の三角形のタイルが無数にあると考えてください。これらのタイルを使用して、側面dの通常の十二角形(12辺の多角形)を形成できる方法をいくつ見つける必要があります。答えが大きすぎる場合は、結果mod998244353を返します。 ステップ これを解決するために、次の手順に従います- b := floor of d/2 - 1 c := 1 for initialize i := 2, when i < d, update (increase i by 1), do:    b := b * (floor of

  2. C++五胞体数

    五胞体数は、パスカルの三角形の5番目の数として表されます。ご存知のように、これは5番目の数字です。つまり、パスカルの三角形に少なくとも5つの数字が必要です。したがって、このシリーズの最初の数字は 1 4 6 4 1から始まります。 パスカルの三角形の4行目。したがって、このチュートリアルでは、たとえば、n番目の五胞体数を見つける必要があります Input : 1 Output : 1 Input : 4 Output : 35 次の図から出力を確認できます- この問題については、可能な限り、これは一種のシリーズであるため、ソリューションでこのシリーズのパターンを見つけようと