-
C++でオイラーパスまたは回路を印刷するためのFleuryのアルゴリズム
Fleuryのアルゴリズムは、特定のグラフからオイラーパスまたはオイラー回路を表示するために使用されます。このアルゴリズムでは、1つのエッジから開始して、前の頂点を削除することにより、他の隣接する頂点を移動しようとします。このトリックを使用すると、オイラー経路または回路を見つけるための各ステップでグラフが簡単になります。 パスまたは回路を取得するには、いくつかのルールを確認する必要があります- グラフはオイラーグラフである必要があります。 2つのエッジがあり、1つはブリッジ、もう1つは非ブリッジの場合、最初に非ブリッジを選択する必要があります。s 開始頂点の選択も注意が必要です
-
C++で整数のオーバーフローをチェックします
安全な唯一の方法は、オーバーフローが発生する前にオーバーフローをチェックすることです。ただし、整数のオーバーフローをチェックするためのハッキーな方法がいくつかあります。したがって、unsigned int加算でオーバーフローを検出することを目的としている場合は、結果が実際に加算された値よりも小さいかどうかを確認できます。たとえば、 例 unsigned int x, y; unsigned int value = x + y; bool overflow = value < x; // Alternatively "value < y" should also
-
C++でバイナリ文字列の1の間に0があるかどうかを確認します
ここで、1つの興味深い問題が発生します。文字列の1の間に0があるかどうかを確認する必要があります。そうでない場合、文字列は有効であり、そうでない場合は無効です.3つの文字列があるとします- 10001111010 00001111100 01111101111 これらの3つの文字列のうち、1のストリーム内に0がないため、Bのみが有効です この問題を解決するために、文字列に存在する最初の1のインデックスを見つけ、最後の1のインデックスも見つけます。次に、これら2つのインデックスに0があるかどうかを確認し、ある場合はfalseを返し、そうでない場合はfalseを返します。 tr
-
バイナリ文字列がC++のどこにでも2回連続して出現するかどうかを確認します
ここで、別の興味深い問題が発生します。次の基準を持つ文字列を受け入れるコードを作成する必要があります。 連続する1のすべてのグループは、長さが2である必要があります 連続する1のすべてのグループは、1つ以上の0の後に表示される必要があります 0110のような文字列があると仮定します。これは、001110、010が無効であるかどうかに関係なく、有効な文字列です。 ここでのアプローチは単純です。 1の出現を見つけて、それが部分文字列011の一部であるかどうかを確認する必要があります。条件が失敗した場合、任意の部分文字列に対してfalseを返し、それ以外の場合はtrueを返します。 例 #i
-
C++で有向グラフが接続されているかどうかを確認します
グラフの接続性を確認するために、トラバーサルアルゴリズムを使用してすべてのノードをトラバースしようとします。トラバーサルの完了後、アクセスされていないノードがある場合、グラフは接続されていません。 有向グラフの場合、接続を確認するためにすべてのノードからトラバースを開始します。 1つのエッジに外向きのエッジのみがあり、内向きのエッジがない場合があるため、他の開始ノードからノードにアクセスできなくなります。 この場合、トラバーサルアルゴリズムは再帰的なDFSトラバーサルです。 入力 −グラフの隣接行列 0 1 0 0 0 0 0 1 0
-
初期化子を使用したC++17Ifステートメント
C ++ 17は、既存のifステートメントの構文を拡張しました。これで、ifステートメント自体に初期条件を指定できます。この新しい構文は、「初期化子を使用したifステートメント」と呼ばれます。この機能拡張により、一般的なコードパターンが簡素化され、ユーザーがスコープを厳密に保つことができます。これにより、スコープ外への変数のリークが回避されます。 例 与えられた数が偶数か奇数かを確認したいとします。 C ++ 17以前は、コードは次のようになりました- #include <iostream> #include <cstdlib> using namespace std
-
特定の文字列がC++で2つの交互の文字で構成されているかどうかを確認します
ここでは、文字列が交互の文字で構成されているかどうかを確認する方法を説明します。文字列がXYXYXYのようなものである場合、それは有効です。文字列がABCDのようなものである場合、それは無効です。 アプローチは簡単です。 i番目の文字とi+2番目の文字がすべて同じかどうかを確認します。それらが同じでない場合はfalseを返し、そうでない場合はtrueを返します。 例 #include <iostream> using namespace std; bool hasAlternateChars(string str){ for (int i = 0; i
-
C++で多数が15で除算可能かどうかを確認します
ここでは、数値が15で割り切れるかどうかを確認する方法を説明します。この場合、その数は非常に多い数です。したがって、数値を文字列として入力します。 数値が15で割り切れるかどうかを確認するには、数値が5で割り切れるか、3で割り切れるかを確認します。したがって、5で割り切れるかどうかを確認するには、最後の数値が0または5であるかどうかを確認する必要があります。桁の合計が3で割り切れるかどうかを確認してください。 例 #include <bits/stdc++.h> using namespace std; bool isDiv15(string num){  
-
C++で多数が11で割り切れるかどうかを確認します
ここでは、数値が11で割り切れるかどうかを確認する方法を説明します。この場合、その数は非常に多い数です。したがって、数値を文字列として入力します。 数値が11で割り切れるかどうかを確認するには、奇数の位置の値の合計と偶数の位置の値の合計が同じである場合、その数値は11で割り切れます。 例 #include <bits/stdc++.h> using namespace std; bool isDiv11(string num){ int n = num.length(); long odd_sum = 0, even_sum =
-
C ++で多数が2、3、5で割り切れるかどうかを確認します
ここでは、数値が2、3、5で割り切れるかどうかを確認する方法を説明します。この場合、その数は非常に多い数です。したがって、数値を文字列として入力します。 数値が2、3、5のLCMで割り切れる場合、その数値は2、3、5で割り切れます。したがって、2、3、5のLCMは30です。数値が30で割り切れるかどうかを確認する必要があります。数値は、10で割り切れる(最後の桁が0)ときは30で割り切れる、3で割り切れる(すべての桁の合計は3で割り切れる) 例 #include <bits/stdc++.h> using namespace std; bool isDiv30(string nu
-
C++で多数が20で割り切れるかどうかを確認します
ここでは、数値が20で割り切れるかどうかを確認する方法を説明します。この場合、その数は非常に多い数です。したがって、数値を文字列として入力します。 数値は20で割り切れますが、それが10で割り切れると、10で割った後、残りの数値は2で割り切れます。したがって、ケースは単純です。最後の桁が0の場合は10で割り切れ、10で割り切れる場合は、最後から2番目の要素が2で割り切れ、数値は20で割り切れます。 例 #include <bits/stdc++.h> using namespace std; bool isDiv20(string num){ int n
-
C++で多数が25で割り切れるかどうかを確認します
ここでは、数値が25で割り切れるかどうかを確認する方法を説明します。この場合、その数は非常に多い数です。したがって、数値を文字列として入力します。 最後の2桁が00の場合、数値は25で割り切れます。または、25で割り切れます。 例 #include <bits/stdc++.h> using namespace std; bool isDiv25(string num){ int n = num.length(); int last_two_digit_val = (num[n-2] - '0') * 10 +
-
C++で多数が3で割り切れるかどうかを確認します
ここでは、数値が3で割り切れるかどうかを確認する方法を説明します。この場合、その数は非常に多い数です。したがって、数値を文字列として入力します。 桁の合計が3で割り切れる場合、数値は3で割り切れます。 例 #include <bits/stdc++.h> using namespace std; bool isDiv3(string num){ int n = num.length(); long sum = accumulate(begin(num), end(num), 0) - '0' * n;  
-
C++で多数が5で割り切れるかどうかを確認します
ここでは、数値が5で割り切れるかどうかを確認する方法を説明します。この場合、その数は非常に多い数です。したがって、数値を文字列として入力します。 数値が5で割り切れるかどうかを確認するには、5で割り切れるかどうかを確認するには、最後の数値が0または5であることを確認する必要があります。 例 #include <bits/stdc++.h> using namespace std; bool isDiv5(string num){ int n = num.length(); if(num[n - 1] != '5'
-
C++で多数が75で割り切れるかどうかを確認します
ここでは、数値が75で割り切れるかどうかを確認する方法を説明します。この場合、その数は非常に多い数です。したがって、数値を文字列として入力します。 数値は75で割り切れる、数値が3で割り切れる、また25で割り切れる。桁の合計が3で割り切れる場合、数値は3で割り切れる、最後の2桁が25で割り切れる場合、数値は25で割り切れます。 例 #include <bits/stdc++.h> using namespace std; bool isDiv75(string num){ int n = num.length(); long s
-
C++で多数が8で割り切れるかどうかを確認します
ここでは、数値が8で割り切れるかどうかを確認する方法を説明します。この場合、その数は非常に多い数です。したがって、数値を文字列として入力します。 最後の3桁で形成された数値が8で割り切れる場合、数値は8で割り切れます。 例 #include <bits/stdc++.h> using namespace std; bool isDiv8(string num){ int n = num.length(); int last_three_digit_val = (num[n-3] - '0') * 100 + (n
-
C++で多数が9で割り切れるかどうかを確認します
ここでは、数値が9で割り切れるかどうかを確認する方法を説明します。この場合、その数は非常に多い数です。したがって、数値を文字列として入力します。 桁の合計が9で割り切れる場合、数値は9で割り切れます。 例 #include <bits/stdc++.h> using namespace std; bool isDiv3(string num){ int n = num.length(); long sum = accumulate(begin(num), end(num), 0) - '0' * n;  
-
線がC++の原点を通過するかどうかを確認します
このセクションでは、線分が原点を通過しているかどうかを確認する方法を説明します。線分の端点を表す2つの座標点があります。 アプローチは簡単です。直線の方程式を作成でき、方程式に(0、0)を入れて方程式が満たされる場合、直線は原点を通過します。 点がであると仮定すると、直線の方程式はこれらの2つの直線を通過します- $$ y-y_ {1} =\ left(\ frac {y_ {2} -y_ {1}} {x_ {2}-x_ {1}} \ right)* \ lgroup x-x_ {1} \ rgroup + c $$ x=0およびy=0とすると、次のようになります $$ x_ {1
-
C++で数値を2^x + 2^yとして表現できるかどうかを確認します
ここでは、数値を2の2の非ゼロ乗の合計として表すことができるかどうかを確認します。したがって、指定された数値Nを(2 x として表すことができることを確認します。 + 2 y 0です。数値が10であるとすると、これは2 3として表すことができます。 + 2 1 。 アプローチは簡単です。 2つのケースがあります。数nが偶数の場合、2 x 0の場合。もう1つのケースは、Nが奇数であり、2の累乗の合計として表すことはできません。累乗を0として使用できないため、奇数を取得できません。すべての奇数の場合、その2進表現のLSbは1です 例 #include <iostream>
-
数値がC++で連続する数値の合計として表現できるかどうかを確認します
ここでは、1つの数値を2つ以上の連続した数値の合計として表すことができるかどうかを確認します。数値が12であるとします。これは3+4+5として表すことができます。 この問題を解決するための直接的で最も簡単な方法があります。数値が2の累乗である場合、いくつかの連続した数値の合計として表すことはできません。留意しなければならない2つの事実があります。 2つの連続する数値の合計が奇数の場合、そのうちの1つは奇数になり、もう1つは偶数になります。 2番目の事実は2n =2 (n-1) + 2 (n-1) 。 例 #include <iostream> using namespac