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

C++で指定された範囲のすべてのGood数値を出力します


この問題では、3つの値L、R、およびdが与えられます。私たちの仕事は、すべての良い数字を印刷することです LからRの範囲内 数字としてdが含まれていません。

かなりの数 は、すべての桁がその右側の桁の合計よりも大きい数値です(すべての桁数がそれよりも小さい)。たとえば、732は適切な数値であり、7> 3+2および3>2です。

それでは、問題を理解するために例を見てみましょう。

Input: L = 400 , R = 500 , k = 3
Output: 410, 420, 421

説明 − 400〜500の適切な数値は−

410, 420, 421, 430, but we cannot use 3 so 430 is not printed.

この問題を解決するために、このために、指定された範囲内のすべての数値をチェックします。つまり、数値が適切な数値であり、その数字のいずれかがkと等しくない場合は、LからRまでをチェックし、それ以外の場合はそのままにします。

適切な番号を確認してください −数値を右から左にトラバースし、合計が次の数値よりも大きい場合はいつでも合計を維持します。

以下のアルゴリズムを説明するプログラムを見てみましょう-

#include<bits/stdc++.h>
using namespace std;
bool isvalidNumber(int n, int d){
   int digit = n%10;
   int sum = digit;
   if (digit == d)
      return false;
   n /= 10;
   while (n){
      digit = n%10;
      if (digit == d || digit <= sum)
         return false;
      else{
         sum += digit;
         n /= 10;
      }
   }
   return 1;
}
void printGoodNumbersLtoR(int L, int R, int d){
   for (int i=L; i<=R; i++){
      if (isvalidNumber(i, d))
         cout << i << " ";
   }
}
int main(){
   int L = 400, R = 600, d = 3;
   cout<<"All good numbers from "<<L<<" to "<<R<<" that do not contain "<<d<<" are :\n";
   printGoodNumbersLtoR(L, R, d);
   return 0;
}

出力

All good numbers from 400 to 600 that do not contain 3 are −
410 420 421 510 520 521 540

  1. C++で特定のノードから距離kにあるすべてのノードを出力します

    この問題では、二分木、ターゲットノード、整数Kが与えられます。ターゲットノードから距離Kにあるツリーのすべてのノードを印刷する必要があります。 。 二分木 は、各ノードに最大2つのノード(1つまたは2つ/なし)を持つ特別なツリーです。 問題を理解するために例を見てみましょう K =2 ターゲットノード:9 出力 − 5 1 3. 説明 − 距離は、ノードの上位、下位、または同じレベルで取得できます。したがって、それに応じてノードを返します。 この問題を解決するには、ターゲットノードからK距離離れたノードのタイプを理解する必要があります。 上記の試験から、k個の離