C++で番号をエンコードする
非負の整数nがあり、そのエンコードされた形式を見つける必要があるとします。エンコード戦略は次のようになります-
| Number | エンコードされた番号 |
|---|---|
| 0 | “” |
| 1 | 「0」 |
| 2 | 「1」 |
| 3 | ” 00” |
| 4 | ” 01” |
| 5 | ” 10” |
| 6 | ” 11” |
| 7 | ” 000” |
したがって、数値が23の場合、結果は1000になり、数値が54の場合、結果は10111になります
。これを解決するには、次の手順に従います-
- binという1つのメソッドを作成します。これには、nとkが必要です。このメソッドは、次のように動作します。
- res:=空の文字列
- while n> 0
- res:=res + nmod2の数字
- n:=n / 2
- 数値を逆にする
- whilex>解像度の長さ
- res:=0の前にresを追加
- return res
- 実際の方法は次のようになります-
- n =0の場合は空の文字列を返し、nが1の場合は「0」を返し、nが2の場合は「1」を返します
- x:=log n base 2
- 2 ^(x + 1)– 1 =nの場合、
- ans:=空の文字列
- xを1増やします
- xが0でない場合、ans:=0にansを追加し、xを1増やします
- 回答を返す
- return bin(n – 2 ^ x + 1、x)
理解を深めるために、次の実装を見てみましょう-
例
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
string bin(int n, int x){
string result = "";
while(n>0){
result += (n%2) + '0';
n/=2;
}
reverse(result.begin(), result.end());
while(x>result.size())result = '0' + result;
return result;
}
string encode(int n) {
if(n == 0)return "";
if(n == 1)return "0";
if(n==2) return "1";
int x = log2(n);
if(((1<<(x+1)) - 1) == n){
string ans = "";
x++;
while(x--)ans+="0";
return ans;
}
return bin(n - (1<<x) + 1, x);
}
};
main(){
Solution ob;
cout << (ob.encode(23)) << endl;
cout << (ob.encode(56)) << endl;
} 入力
23 54
出力
1000 11001
-
C++での質素な数
この問題では、正の整数Nが与えられます。私たちのタスクは、与えられた数が質素な数であるかどうかをチェックするプログラムを作成することです。 不正な番号 −指定された数の素因数分解の桁数よりも厳密に桁数が多い数。 例 − 625、数625の素因数は5 4です。 。 625の桁数は3です。 5 4の桁数 は2です。 3は厳密に2より大きくなります。したがって、625は質素な数です。 最初のいくつかの質素な数は − 125、128、243、256、343、512、625など。 問題を理解するために例を見てみましょう Input: n = 128 Output: Frugal n
-
C++五胞体数
五胞体数は、パスカルの三角形の5番目の数として表されます。ご存知のように、これは5番目の数字です。つまり、パスカルの三角形に少なくとも5つの数字が必要です。したがって、このシリーズの最初の数字は 1 4 6 4 1から始まります。 パスカルの三角形の4行目。したがって、このチュートリアルでは、たとえば、n番目の五胞体数を見つける必要があります Input : 1 Output : 1 Input : 4 Output : 35 次の図から出力を確認できます- この問題については、可能な限り、これは一種のシリーズであるため、ソリューションでこのシリーズのパターンを見つけようと