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

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

  1. 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

  2. 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