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

C++でのY未満の数のセットの最小数


問題の説明

連続する数字の文字列と数字のYが与えられた場合、タスクは、すべてのセットが以下のルールに従うように最小セットの数を見つけることです-

  • セットには連続した数字が含まれている必要があります
  • 数字を複数回使用することはできません。
  • セット内の数はYを超えてはなりません。

str =“ 1234”およびY =20の場合、以下のセットが作成されるため、答えは3です-

{12}{3}および{4}

アルゴリズム

  • 文字列を数値に変換
  • 数値がY以下の場合は、f=1とマークします
  • 数値がYを超える場合は、f =1の場合はカウントを増やし、fを0として再初期化し、numをs [i]-‘0’またはnumを0として初期化します
  • 文字列を完全に反復した後、fが1の場合はカウントを増やします

#include <iostream>
#include <string>
using namespace std;
int getMinSets(string str, int y) {
   int cnt = 0;
   int num = 0;
   int l = str.length();
   int f = 0;
   for (int i = 0; i < l; ++i) {
      num = num * 10 + str[i] - 48;
      if (num <= y) {
         f = 1;
         continue;
      }
      if (f) {
         ++cnt;
      }
      num = str[i] - '0';
      f = 0;
      if (num <= y) {
         f = 1;
      } else {
         num = 0;
      }
   }
   if (f) {
      ++cnt;
   }
   return cnt;
}
int main() {
   string str = "1234";
   int y = 20;
   cout << "Minimum sets = " << getMinSets(str, y) << endl;
   return 0;
}

出力

上記のプログラムをコンパイルして実行する場合。次の出力を生成します-

Minimum sets = 3

  1. C++でのデュードニー番号

    与えられた数の底の数理論で定義された数は、最初の自然数の桁の合計が2番目の数の桁の合計に等しくなるように、別の自然数の完全な3乗に等しい自然数です。 (ウィキペディア)。 番号はヘンリー・デュードニーによって発見されました 。その数式 は- ここでは、整数nが与えられます。私たちの仕事は、与えられた番号nが人物番号であるかどうかを確認することです。 問題を理解するために例を見てみましょう 入力: N =17592 出力: いいえ 説明: 与えられた番号はダドニー番号ではありません。 ソリューションアプローチ- 解決策は、デュードニー番号の基本的な定義にあります。

  2. C++でn以下のすべての階乗数を検索します

    ここでは、n以下のすべての階乗数を出力する方法を説明します。数値Nは、正の数の階乗である場合、階乗数と呼ばれます。したがって、いくつかの階乗数は1、2、6、24、120です。 階乗数を印刷するために、階乗を直接見つける必要はありません。 i =1から始めて、階乗*iを出力します。最初は階乗は1です。理解を深めるためにコードを見てみましょう。 例 #include <iostream> using namespace std; void getFactorialNumbers(int n) {    int fact = 1;    int