C++で3と4しかない記数法でn番目の数を見つける
この問題では、要素Nが与えられます。3と4だけの記数法でN番目の数を見つける必要があります。
記数法は、要素3、4、33、34、43、44、333、334、343、344、…
で構成されています。問題を理解するために例を見てみましょう
入力
N = 6
出力
44
説明
記数法の番号は、-3、4、33、34、43、44 ...
です。ソリューションアプローチ
記数法は2進数法に似ていますが、0は3に置き換えられ、1は4に置き換えられます。
これをsBinaryとしましょう。
したがって、数N番目の数は(n-1)のSbinary変換です。
この知識があれば、(N-1)に相当する2進数を見つけて、3で見つかった2進数の各桁を加算することで問題を簡単に解決できます。
10進数を2進数に変換する方法は?
ソリューションの動作を説明するプログラム
例
#include<iostream> using namespace std; void findNThTermNumberSystem(int N) { if(N == 1 || N == 2) { cout<<(N-1) + 3; return; } N -= 1; findNThTermNumberSystem(N/2); cout<<((N % 2) + 3); } int main(){ int N = 12; cout<<N<<"th term of the number system is "; findNThTermNumberSystem(N); return 0; }
出力
12th term of the number system is 434
-
C++でnに最も近くmで割り切れる数を見つけます
2つの整数nとmがあるとします。 nに最も近い数を見つけて、mで割る必要があります。そのような数値が複数ある場合は、絶対値が最大の数値を表示してください。 nがmで完全に割り切れる場合は、nを返します。したがって、n =13、m =4の場合、出力は12になります。 これを解決するには、次の手順に従います- q:=n / m、n1:=m*qとします 0の場合、n2:=m *(q + 1)、それ以外の場合、n2:=m *(q-1) if | n – n1 | <| n – n2 |、次にn1を返し、それ以外の場合はn2 例 #include<iostream> #incl
-
C ++でK%p =0およびq%K=0となる最小数Kを見つけます
2つの整数PとQがあるとします。KmodP=0とQmodK =0のように、最小の数Kを見つける必要があります。それ以外の場合は-1を出力します。したがって、PとQが2と8の場合、Kは2になります。2mod2 =0、8モード2=0として。 Kを可能にするには、QをPで割り切れる必要があります。したがって、P mod Q =0の場合はPを出力し、そうでない場合は-1を出力します。 例 #include<iostream> using namespace std; int getMinK(int p, int q) { if (q % p == 0) &nbs