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