-
C++で文字列の最後の非繰り返し文字を検索します
文字列strがあるとします。その中の最後の非反復文字を見つける必要があります。したがって、入力文字列が「プログラミング」のようなものである場合。したがって、最初の繰り返しのない文字は「n」です。そのような文字が存在しない場合は、-1を返します。 これは、1つの周波数配列を作成することで解決できます。これにより、指定された文字列の各文字の頻度が保存されます。頻度が更新されたら、最後の文字から1つずつ文字列のトラバースを開始します。次に、保存されている頻度が1であるかどうかを確認し、1の場合は戻り、そうでない場合は前の文字に進みます。 例 #include <iostream> us
-
C++で数字kまたはkで割り切れる数字を含むn番目の数値を検索します
2つの正の整数nとkが与えられ、数字kを含むかkで割り切れるn番目の数を見つける必要があります。 kは[2から9]の範囲になります。したがって、nとkがそれぞれ15と3の場合、出力は33になります。数値として[3、6、9、12、13、15、18、21、23、24、27、30、31、33]各要素に数字k=3またはkによる除算が含まれ、このn番目の数値が33である数値。したがって、出力は33です。 kとkの倍数を含む各数値を確認し、n番目の要素が得られるまで数えます。 例 #include<iostream> using namespace std; bool hasDigit(in
-
関数の値がC++でAに最も近い指定されたリストから番号を検索します
F(n)=P –(0.006 * n)のような関数F(n)があるとします。ここで、Pも与えられます。整数のリストと数値Aが与えられます。タスクは、関数の値がAに近い、与えられたリストから数値を見つけることです。したがって、P =12、A =5の場合、リストは{1000 、2000}したがって、出力は1000になります。したがって、P=12およびA=5の場合、1000の場合、F(1000)=12 –(0.006 * 1000)=6であり、2000の場合、F(2000)=12 –(0.006 * 2000)=0、5に最も近い値は6であるため、これが採用されます。 リスト内の各値を反復処理し、すべ
-
C ++で2番目の文字列に対してスワップを実行した後、2つの文字列間の最長の共通プレフィックスを検索します
2つの文字列str1とstr2があるとします。 2番目の文字列に対してゼロ以上の操作を実行した後、それらの間で最も長い共通プレフィックスを見つけます。各操作で、任意の2文字を入れ替えることができます。したがって、str1 =“ HERE”、str2 =“ THERE”の場合、出力は4になります。2番目の文字列は、文字を入れ替えるだけで“ HERET”にすることができます。したがって、最長のプレフィックスの長さは4です。 私たちが知っているように、私たちはstr2でしか交換できません。また、マトリックスの長さを最大化する必要があります。したがって、str1をトラバースし、str1の現在の文字の
-
C++でマトリックス内の空洞の数を見つける
1つの行列が与えられていると考えてください。マトリックス内の空洞の数を見つける必要があります。 1つの要素は、それを囲む他のすべての要素がその要素よりも大きい場合にキャビティとして示されます。したがって、行列が-のような場合 4 5 6 7 1 5 4 5 6 したがって、出力は1です。 周囲の要素を確認して決定を下すだけです。 例 #include<iostream> #define MAX 100 using namespace std; int numberOfCavities(int array[][MAX], i
-
C++で指定された制約を持つマトリックス内の最長パスを検索します
次数nの正方行列が1つあるとします。それはすべて異なる要素を持っています。したがって、パスに沿ったすべてのセルが1の差で昇順になるように、最大長のパスを見つける必要があります。1つのセルから4つの方向に移動できます。左、右、上、下。したがって、行列が-のような場合 1 2 9 5 3 8 4 6 7 したがって、出力は4になります。最長パスは6→7→8→9です。 この問題を解決するために、私たちはこの考えに従います。すべてのセルから始まる最長パスを計算します。すべてのセルの最長パスを取得したら、すべての最長パスの最大値を返します。
-
C++で正確にk個の奇数を持つ最長のサブ配列を見つけます
n個の要素を持つ1つの配列があるとします。問題は、正確にk個の奇数を持つ最長のサブ配列を見つけることです。したがって、A =[2、3、4、11、4、12、7]、およびk =1の場合、出力は4になり、サブ配列は[4、11、4、12]になります。 これは、スライディングウィンドウを使用して解決できます。タスクは以下のようなものです- max:=0を初期化し、:=0をカウントし、:=0を開始します 0からn– 1の範囲のiについては、次のようにします arr [i] mod 2が0でない場合は、カウントを1増やします kで開始<=iのときに、次の手順を実行します arr [start] m
-
C++で2つの数値間の最小距離を見つける
ソートされていない配列Aが1つ、数値xとyが2つあるとします。 Aでxとyの間の最小距離を見つける必要があります。配列には重複する要素を含めることもできます。したがって、配列がA =[2、5、3、5、4、4、2、3]、x =3、y =2の場合、3と2の間の最小距離は1になります。 これを解決するには、次の手順に従う必要があります 配列を左から右にトラバースし、xまたはyのいずれかが見つかった場合は停止します。次に、その位置のインデックスをprevに保存します ここで、インデックスprevの後に配列をトラバースします。現在のインデックスiの要素がxまたはyのいずれかと一致する場合は、A [p
-
C++でn辺の凸多角形の対角線の数を求めます
数nがあり、n辺の凸多角形の対角線の数を見つける必要があるとします。したがって、n =5の場合、対角線の数は5になります。 これはn面の凸多角形であるため、各頂点からn – 3の対角線を描画して、2つの側面に隣接する頂点とそれ自体を残すことができます。したがって、n個の頂点の場合はn *(n-3)になりますが、2回検討しているため、n(n – 3)/2になります。 例 #include<iostream> using namespace std; int diagonalCount(int n) { return n * (n - 3) / 2; } i
-
C++でNからMに到達するための最小ステップ数を見つけます
2つの整数NとMがあるとします。与えられた操作を実行して、NからMに到達するための最小ステップ数を見つける必要があります- 数値xに2を掛けると、xは2*xになります 数値xから1を引くと、数値はx –1になります N=4およびM=6の場合、出力は2になります。したがって、Nに対して操作番号2を実行すると、Nは3になり、更新されたNの値に対して操作番号1を実行すると、2 * 3=6になります。したがって、最小ステップ数は2になります。 この問題を解決するために、次のルールに従います- Mから始まる数Nを取るように、問題を元に戻すことができるので、新しい2つの操作が行われます
-
C++で合計金額を支払うために必要なコインの最小数を調べます
数Nがあり、1、10、および25通貨のコインに相当する無制限の数のコインがあるとします。正確な金額Nを支払うために使用する必要のあるコインの最小数を見つけます。Nが14であるとすると、コインの数は5になり、10の価値のあるコインが1つ、1の価値のあるコインが4つになります。 これを解決するには、次の手順を使用する必要があります- N <10の場合、N個の1バリューコインを返します 9およびN<25の場合、値を10で除算して結果を取得します。残りは、1つの値のコインでカバーされ、カウントを加算して結果を取得します。 25の場合は、25で除算し、結果を取得します。結果が25未満の場合は、2
-
C++の等差数列で不足している数を見つけます
等差数列の要素を順番に表す配列があるとします。 1つの要素が欠落しています。不足している要素を見つける必要があります。したがって、arr =[2、4、8、10、12、14]の場合、6が欠落しているため、出力は6になります。 二分探索を使用して、この問題を解決できます。真ん中の要素に移動し、真ん中と真ん中の隣の違いがdiffと同じかどうかを確認します。そうでない場合は、インデックスmidとmid+1の間に欠落している要素が存在します。真ん中の要素がAPのn/2番目の要素である場合、欠落している要素は右半分にあり、そうでない場合は左半分にあります。 例 #include <iostream
-
C++の行列の任意の列で最大の差を持つペアを検索します
1つの行列または次数NxNがあるとします。行列のどの列とも最大の差を形成する要素のペアを見つける必要があります。したがって、行列が-のような場合 1 2 3 5 3 5 9 6 7 したがって、出力は8になります。ペアは列0から(1、9)であるため、 考え方は単純です。各列の最大要素と最小要素の違いを簡単に見つける必要があります。次に、最大差を返します。 例 #include<iostream> #define N 5 using namespace std; int maxVal(int x, int y){  
-
C++の等比数列で不足している数を見つけます
等比数列の要素を順番に表す配列があるとします。 1つの要素が欠落しています。不足している要素を見つける必要があります。したがって、arr =[1、3、27、81]の場合、9が欠落しているため、出力は9になります。 二分探索を使用して、この問題を解決できます。真ん中の要素に行き、真ん中と真ん中の隣の比率が一般的な比率と同じであるかどうかを確認します。そうでない場合は、インデックスmidとmid+1の間に欠落している要素が存在します。真ん中の要素がGPのn/2番目の要素である場合、欠落している要素は右半分にあり、そうでない場合は左半分にあります。 例 #include <iostream&
-
C++でa^bに最も近いxの倍数を見つけます
a、b、xの3つの整数があるとします。タスクは、abに最も近いxの倍数を取得することです。したがって、a =5、b =4、x =3の場合、出力は624になります。54=625であり、624は3の倍数であり、625に最も近いです。 タスクは簡単です。この問題を解決するには、次の手順に従う必要があります- numを計算する:=a b 次に、f:=(num / x)のフロアを見つけます これで、左側の最も近い要素はcl =x * fになり、右側の要素はcr =x *(f + 1)になります 最後に、それらの中で最も近い数はmin(num – cl、cr – num)になります 例 #i
-
C++で指定された条件を満たす最初のN個の自然数の順列を見つけます
2つの整数NとKがあり、すべての1 1の条件を満たすK個の要素が正確に存在するように、最初のN個の自然数の順列Pを見つける必要があるとします。 <=N。したがって、N=3およびK=1の場合、出力は2、1、3になります。gcd(2、1)=1、gcd(1、2)=1、gcd(3、3)=3 アプローチは単純です。最後のk個の要素をその場所に保持し、残りの要素を移動して、i番目の要素が(i + 1)番目の位置に配置され、(N-K)番目の要素が保持されるようにします。 gcd(x、x + 1)=1であるため、位置1。 例 #include<iostream> using namespac
-
C++で3で割り切れるが6で割り切れないnの順列を見つける
数nがあり、この数の順列を見つける必要があるとします。これは3で割り切れますが、6で割り切れません。そのような値を作成できない場合は、-1を返します。たとえば、nが336の場合、出力は363になります。 数字が6で割り切れるということは、3と2で割り切れるということです。したがって、3で割り切れる各偶数は、6で割り切れます。3で割り切れる数の桁を入れ替えると、 、奇妙なことに、それは結果になります。 例 #include<iostream> #include<cmath> using namespace std; int findNumber(int n) { &nb
-
(A [i]%K)がC++で最大になるような配列で素数Kを見つけます
n個の整数を持つ配列Aがあるとします。 Kが素数であるような1つの要素Kを見つける必要があり、A [i] mod Kは、Kのすべての可能な値の中ですべての有効なiに対して最大です。そのような数が見つからない場合は、-1を返します。たとえば、A =[2、10、15、7、6、8、13]の場合、出力は13になります。3つの素数2、7、および13があります。A[i]の可能な最大値mod 2は1(15 mod 2)、7の場合は6 mod 7 =6、13の場合は10 mod 13=10になります。これが最大値です。 A [i] mod Kの値を最大化するには、KはAの最大素数である必要があり、A [i]
-
C++で1からnまでの素数の積を検索します
数nがあるとします。 1からnまでの素数の積を見つけなければなりません。したがって、n =7の場合、出力は2 * 3 * 5 * 7=210のように210になります。 エラトステネスのふるい法を使用して、すべての素数を見つけます。次に、それらの積を計算します。 例 #include<iostream> using namespace std; long PrimeProds(int n) { bool prime[n + 1]; for(int i = 0; i<=n; i++){
-
C++で文字列の最初に存在する繰り返し文字を検索します
文字列があるとします。繰り返される最初の文字を見つける必要があります。文字列は「HelloFriends」なので、最初に繰り返される文字はlになります。次々と2つのlがあるので。 これを解決するために、ハッシュ手法を使用します。ハッシュテーブルを1つ作成し、各文字を1つずつスキャンします。文字が存在しない場合はハッシュテーブルに挿入し、すでに存在する場合はその文字を返します。 例 #include<iostream> #include<unordered_set> using namespace std; char getFirstRepeatingChar(stri