-
C++のコインパス
N個の数値(A1、A2、...、AN、および別の整数B)を持つ配列A(インデックスは1から始まる)があるとします。整数Bは、任意のインデックスから配列A内のiである場合、任意の配列にジャンプできることを示します。配列Aの場所の1つは、この場所にジャンプできる場合、i + 1、i + 2、…、i+Bのインデックスが付けられます。また、インデックスiを踏むと、Aiのコインを支払う必要があります。 Aiが-1の場合、配列内のインデックスが付けられたiの場所にジャンプできないことを意味します。 ここで、配列Aのインデックス1の場所から開始し、最小のコインを使用してインデックスNの場所に到達することを
-
C++で9を削除
整数nがあるとすると、次の操作を実行した後、n番目の整数を返す必要があります。整数1から開始し、9、19、29などの9を含む整数を削除します。 1、2、3、4、5、6、7、8、10、11、...1が最初の整数になることに注意する必要があります。 したがって、入力が9のような場合、出力は10になります これを解決するには、次の手順に従います- ret:=0 s:=1 nがゼロ以外の場合、-を実行します。 ret:=ret +(n mod 9)* s n:=n / 9 s:=s * 10 s:=s * 10 理解を深めるために、次
-
KC++の空のスロット
N個の電球が連続していて、1からNまでの番号が付けられているとします。最初は、すべての電球がオフになっています。 N日後にすべての電球がオンになるまで、毎日1つの電球をオンにすることができます。長さNのアレイ電球があり、bulbs [i] =xの場合、これは(i + 1)日目に位置xで電球をオンにすることを示します。別の整数Kがある場合、最小日数が2つ存在するように、それらの間に正確にK個の球根があり、すべてがオフになっています。そのような日がない場合は、-1を返します。 したがって、入力が球根のようなものである場合:[1,3,2]およびK =1の場合、出力は2 asになります。 初日
-
C++での個別の島IIの数
グリッドと呼ばれる空でない2Dバイナリ配列があるとします。ここで、島は4方向に接続された1(土地を表す)のグループです。グリッドの4つのエッジすべてが水に囲まれていると想定することもできます。 異なる島の数を数える必要があります。島が同じ形状であるか、90度、180度、または270度の回転のみ、または左右方向または上下方向の反射後の同じ形状である場合、島は別の島と同じであると見なされます。 したがって、入力が次のような場合、 1 1 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1
-
C++での最小ウィンドウサブシーケンス
2つの文字列SとTがあるとすると、Sの最小部分文字列Wを見つけて、TがWの部分列になるようにする必要があります。SにTのすべての文字をカバーするウィンドウがない場合は、空の文字列を返します。そのようなウィンドウが複数ある場合は、開始インデックスが一番左にあるウィンドウを返す必要があります。 したがって、入力がS =abcdebdde、T =bdeの場合、出力はbddeの前に発生するbcdeになります。 「deb」は、ウィンドウ内のTの要素が順番に発生する必要があるため、小さいウィンドウではありません。 これを解決するには、次の手順に従います- tidx:=0、tlen:=Tのサイズ
-
C++での従業員の自由時間
従業員のスケジュールのリストを提供したとします。これは、各従業員の労働時間を表します。ここで、各従業員が重複しない間隔のリストを持っていると仮定します。これらの間隔はソートされています。すべての従業員に共通の正の長さの自由時間を表す有限間隔のリストを見つける必要があり、それもソートされた順序になります。間隔は[x、y]の形式で表されます。たとえば、schedule [0] [0] .start =1、schedule [0] [0] .end=2です。 したがって、入力がschedule =[[[1,2]、[5,6]]、[[1,3]]、[[4,10]]]の場合、出力の1つは[[ 3,4]]。
-
C++の基本的な電卓III
単純な式の文字列があり、その式を評価するための基本的な計算機を実装する必要があるとします。式の文字列には、開き括弧と閉じ括弧、プラス+またはマイナス記号-、非負の整数、および空のスペースを含めることができます。式の文字列には、負でない整数、+、-、*、/演算子、開き括弧と閉じ括弧、および空のスペースのみが含まれます。整数除算はゼロに向かって切り捨てる必要があります。 したがって、入力が「6-4 / 2」の場合、出力は4になります これを解決するには、次の手順に従います- l1:=0、l2:=1 o1:=1、o2:=1 1つのスタックstを定義する n:=sのサイ
-
C++でガソリンスタンドまでの最大距離を最小化する
水平方向の数直線が1本あるとします。その数直線上に、ステーション[0]、ステーション[1]、...、ステーション[N-1]の位置にガソリンスタンドがあります。ここで、N=ステーション配列のサイズです。ここで、隣接するガソリンスタンド間の最大距離であるDが最小になるように、K個のガソリンスタンドを追加します。 Dの可能な限り最小の値を見つける必要があります。 したがって、入力がステーション=[1、2、3、4、5、6、7、8、9、10]、K =9のような場合、出力は0.5になります。 これを解決するには、次の手順に従います- 関数ok()を定義します。これには、x、配列v、が必要です。
-
C++で有効なサブアレイの数
整数の配列Aがあるとすると、この条件を満たす空でない連続サブ配列の数を見つける必要があります。サブ配列の左端の要素は、サブ配列内の他の要素より大きくありません。 したがって、入力が[1,4,2,5,3]の場合、出力は11になります。これは、11個の有効なサブ配列があるため、[1]、[4]、[2]、[5]のようになります。 ]、[3]、[1,4]、[2,5]、[1,4,2]、[2,5,3]、[1,4,2,5]、[1,4,2 、5,3]。 これを解決するには、次の手順に従います- ret:=0 n:=numsのサイズ 1つのスタックstを定義する 初期化i:=0の場合
-
範囲内の桁数
0から9までの整数dがあるとすると、下限と上限としてそれぞれ下限と上限の2つの正の整数もあります。下限と上限を含む、下限と上限の間のすべての整数でdが数字として出現する回数を見つける必要があります。 したがって、入力がd =1、low =1、high =13の場合、桁d =1は1,10,11,12,13のように6回発生するため、出力は6になります。 これを解決するには、次の手順に従います- 関数zero()を定義します。これにはnが必要です。 ret:=0、x:=0 nが0と同じ場合、- 1を返す 初期化m:=1の場合、m <=nの場合、更新m:=m * 1
-
C++での紛らわしい数II
ある数字があるとします。その数字を180度回転させて、新しい数字を形成するとします。 0、1、6、8、9を180度回転させると、それぞれ0、1、9、8、6になります。ただし、2、3、4、5、7を180度回転させると、無効になります。 紛らわしい数字は、180度回転すると新しい数字になる数字です。したがって、正の整数Nがある場合、1からNまでの紛らわしい数の数を見つける必要があります。 したがって、入力が20のような場合、出力は6になります これを解決するには、次の手順に従います- 1つのマップマッピングを定義する 有効なアレイを定義する 関数solve()を定義します。
-
C++での最大数
すべてのセルの値が0または1で、サイズがl x lのMの正方形の部分行列の数が最大でmaxOnesであるような、次元wxhの行列Mがあるとします。行列Mが持つことができるものの可能な最大数を見つける必要があります。 したがって、入力がw =3、h =3、l =2、maxOnes =1の場合、出力は3 * 3行列のように4になり、2*2サブ行列に複数の1を含めることはできません。 。 4つある最良の解決策は-です 1 0 1 0 0 0 1 0 1 これを解決するには、次の手順に従います- ret:=0 サイズnxnの2D
-
C++でブロックを構築するための最小時間
ブロックのリストがあると仮定します。blocks[i]=tの場合、これは、i番目のブロックを構築するのにt単位の時間が必要であることを意味します。ブロックは、1人のワーカーのみが作成できます。 1人の労働者は、2人の労働者に分割するか、ブロックを作成して家に帰ることができます。これらの2つの決定には時間がかかります。 1人のワーカーを2人のワーカーに分割する時間コストは、splitと呼ばれる数値として示されます。 したがって、入力がブロック=[1,2]で、split =5の場合、ワーカーを5つの時間単位で2つのワーカーに分割し、それぞれをブロックに割り当てることができるため、出力は7になりま
-
C++で有効なパリンドロームIII
文字列sと別の数値kがあるとします。指定された文字列がK回文であるかどうかを確認する必要があります。 文字列から最大k文字を削除することで回文に変換できる場合、その文字列はK回文と呼ばれます。 したがって、入力がs =abcdeca、k =2のような場合、出力は「b」と「e」の文字を削除することで真になり、回文になります。 これを解決するには、次の手順に従います- 関数lcs()を定義します。これにはs、t、が必要です。 n:=sのサイズ sの前に1つの空白スペースを追加します tの前に1つの空白スペースを追加します サイズ(n + 1)x(n + 1)の2
-
チョコレートをC++で分割する
いくつかのチャンクで構成されるチョコレートバーが1つあるとします。各チャンクには、甘さと呼ばれるリストによって与えられる独自の甘さがあります。 K人の友達の間でチョコレートを共有したいので、Kカットを使用してチョコレートバーをK + 1ピースにカットし始めると、各ピースはいくつかの連続したチャンクで構成されます。総甘さを最小限に抑えた作品を取り出し、他の作品を友達にあげれば。チョコレートバーを最適にカットすることで、得られる最大の総甘さを見つける必要があります。 したがって、入力が甘さ=[1,2,3,4,5,6,7,8,9]、K =5のようである場合、チョコレートを[1,2に分割できるため、
-
C++での回文の削除
arrという整数配列があるとします。これで、1回の移動で、インデックスiからjまでの回文サブ配列を選択できます。ここでi <=jであり、指定された配列からそのサブ配列を削除します。サブアレイを削除した後、そのサブアレイの左側と右側の要素が移動して、削除によって残されたギャップを埋めることを覚えておく必要があります。配列からすべての数字を削除するために必要な最小移動数を見つける必要があります。 したがって、入力がarr =[1,3,4,1,5]の場合、出力は3になります。このシーケンスで削除できるため、[4]を削除してから、[1,3,1]を削除します。 [5]を削除します。 これを解決するに
-
C++で交差しないハンドシェイク
円の周りに立っているn人が偶数で、各人が他の人と握手しているとすると、合計n/2回の握手があります。どのハンドシェイクも交差しないように、これらのハンドシェイクが発生する可能性のある方法の数を見つける必要があります。答えは非常に大きい可能性があるため、答えmod 10 ^ 9+7を返します。 したがって、入力がn =2の場合、出力は1になります これを解決するには、次の手順に従います- m:=10 ^ 9 + 7 サイズ(n + 1)の配列dpを定義します dp [0]:=1 初期化i:=0の場合、i <=nの場合、更新i:=i + 2、do −
-
C++プログラミングでリンクリストを削除する関数を記述します
ここでは、リンクリストのすべての要素を1つずつ削除する関数を作成します。 c / c ++では、このタスクを実行するための特定の機能はありませんが、Javaでは、リンクリストの削除を容易にするために自動ガベージコレクションが実行されます。 それでは、このプログラムの実装を見てみましょう。 例 #include <iostream> using namespace std; class Node{ public: int data; Node* next; }; void deleteLinkedLis
-
C++で指定された確率に従って3つの数値のいずれかを生成する関数を記述します
この問題では、与えられた確率に基づいて3つの数値を生成する関数を作成する必要があります。 このために、組み込みの乱数ジェネレーター関数であるrand(a、b)を使用します。これは、[a、b]の範囲内の乱数を等しい確率で生成します。 私たちのタスクは、確率P(A)+ P(B)の定義に従って、それぞれP(A)、P(B)、P(C)として発生する確率を持つ3つの数値A、B、Cのみを返すことです。 + P(C)=1。 rand(a、b)を使用して関数を作成します。 aからbまでの任意の数の発生確率が同じであるというその機能を使用します。ただし、確率P(A)などでAを取得する必要があります。したがっ
-
C++のリンクリストで特定のintが発生する回数をカウントする関数を記述します
この問題では、リンクリストが提供されます。私たちのタスクは、リンクリストで特定の数が発生した回数をカウントできる関数を作成することです。 問題を理解するために例を見てみましょう 入力 Linked list = 10-> 50 -> 10 -> 20 -> 100 -> 10, int = 10 出力 3 説明 −リンクリストに10という数字が3回出現します。 この問題の解決策は簡単です。リンクリストをトラバースし、現在のノード値が指定された数に等しいカウンターをインクリメントするだけです。 リンクリストのノードのループは、反復と再帰を使用して実行できます