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

C ++で1を追加し、末尾のゼロを削除することにより、Nから生成できる一意の数値をカウントします


入力として数値Nが与えられます。 Nに対して2つの操作を実行し、プロセスで生成された一意の番号の数を特定します。手順は-

  • 番号に1を追加

  • 生成された数値がある場合は、末尾のゼロを削除します

Nが8の場合、生成される数値は

手順1−8→9→

を適用する

手順2-1を適用する→(10から0を削除)

ステップ1の適用:2→3→4→5→6→7→8(同じシーケンス)

一意の番号の数は9になります。

入力

N=21

出力

Count of unique numbers that can be generated from N by adding one and
removing trailing zeros are: 18

説明

Numbers will be: 21, 22, 23, 24, 25, 26, 27, 28, 29, 3, 4, 5, 6, 7, 8, 9, 1, 2, 3 −−−now same sequence Unique numbers are: 18

入力

N=38

出力

Count of unique numbers that can be generated from N by adding one and removing trailing zeros are: 11

説明

Numbers will be:
38, 39, 4, 5, 6, 7, 8, 9, 1, 2, 3, 4 −−−now same sequence
Unique numbers are: 11

以下のプログラムで使用されるアプローチは次のとおりです

このアプローチでは、手順1と2を適用した後に生成されたすべての一意の番号を含む順序付けられていないセットを作成します。番号が繰り返される場合は、反復を停止します。セットのサイズにより、プロセスで生成された一意の番号の数がわかります。

  • 数値Nを整数とします。

  • 生成された数値を挿入するには、unordered_setU_Sを使用します。

  • 関数unique_N(unordered_set &U_S、int N)は、集合とNを取り、すべての数値が一意になるまで集合U_Sに数値を追加します。

  • U_S.count(N)が1を返す場合、それはNがセットにすでに存在することを意味します。したがって、数値は繰り返され、関数から戻ります。

  • それ以外の場合は、セットにNを挿入し、操作1(1ずつインクリメント)を適用します。

  • 数値Nに後続ゼロ(10の倍数)があるかどうかを確認します。

  • N%10が0の場合は、末尾のゼロを10で割って削除します。

  • 更新されたNを使用して関数unique_N()を呼び出します。

  • 関数から戻った後、セットU_Sのサイズとしてカウントします。

  • 結果をカウントとして出力します。

#include <bits/stdc++.h>
using namespace std;
void unique_N(unordered_set<int>& U_S, int N){
   if (U_S.count(N)){
      return;
   }
   U_S.insert(N);
   N = N + 1;
   while (N % 10 == 0){
      N = N / 10;
   }
   unique_N(U_S, N);
}
int main(){
   int N = 7;
   unordered_set<int> U_S;
   unique_N(U_S, N);
   int count = U_S.size();
   cout<<"Count of unique numbers that can be generated from N by adding one and removing
      trailing zeros are: "<<count;
   return 0;
}

出力

上記のコードを実行すると、次の出力が生成されます-

Count of unique numbers that can be generated from N by adding one and removing trailing zeros are: 9

  1. C++のゲームでゼロ以下に減らすことができる数を数えます

    正の数の配列と2つの整数AおよびBが与えられます。2人のプレーヤーが、配列内の数を減らすゲームをプレイしています。プレーヤー1は配列の任意の要素をAだけ減らすことができ、プレーヤー2は配列の任意の要素をBだけ増やすことができます。目標は、プレーヤー1が0以下に減らすことができる数の数を見つけることです。最初の動き。一度0以下に減少した数は、プレーヤー2では考慮できません。 例 入力 arr[] = { 1,4,5,2 } A=2, B=3 出力 Count of numbers that can be reduced to zero or less in a game are: 1 説明

  2. C++で1回の移動でビショップがアクセスできる正方形の総数を数えます

    8 X 8グリッドで表されるチェス盤では、行と列の位置の形式でビショップの位置が与えられます。目標は、ビショップが1回の移動で訪問できる正方形の総数を見つけることです。ビショップはすべての方向に移動できることがわかっています(対角線上で左上/下および右上/下)。 例 入力 row = 5, column = 4 出力 Count of total number of squares that can be visited by Bishop in one move are: 13 説明 As shown in above figure the squares that Bishop