C ++で数値のxorがゼロより大きくなるように、すべての行の数値を選択できるかどうかを確認します。
サイズNxMの2D配列が1つあるとします。タスクは、これらの要素のXORがゼロ以外または0より大きいように、すべての行から数値を選択できるかどうかを確認することです。1つの行列がこのように-
7 | 7 | 7 |
10 | 10 | 7 |
XORを実行すると、2つの行の最後の要素が7と10である場合を除いて、答えはゼロ以外になります
。この問題を解決するための解決策は非常に簡単です。最初に、各行の最初の列の要素のXORが0であるかどうかを確認します。ゼロ以外の場合は可能です。それ以外の場合は、いずれかの行に2つ以上の異なる要素があるかどうかを確認します。ある場合は、それも可能です。上記の両方の条件が満たされない場合、それは不可能です。
例
#include<iostream> using namespace std; #define N 2 #define M 3 bool isXORnonZero(int matrix[N][M]) { int xor_value = 0; for (int i = 0; i < N; i++) { xor_value ^= matrix[i][0]; } if (xor_value != 0) return true; for (int i = 0; i < N; i++) { for (int j = 1; j < M; j++) { if (matrix[i][j] != matrix[i][0]) return true; } } return false; } int main() { int mat[N][M] = { { 7, 7, 7 }, { 10, 10, 7 } }; if (isXORnonZero(mat)) cout << "XOR has non-zero value"; else cout << "XOR has zero value"; }
出力
XOR has non-zero value
-
数値がC++で2つの豊富な数値の合計として表現できるかどうかを確認します
番号があるとします。これを2つの過剰数の合計として表す必要があります。はいの場合は数値を出力し、そうでない場合は-1を出力します。数は過剰数と呼ばれ、その数のすべての適切な除数の合計であり、sum(n)は数の値よりも大きいことで示されます。 これを解決するために、すべての過剰数をセットに格納し、指定された数nに対して、i =1からnのループを実行し、nと(n – i)が過剰かどうかを確認します。 例 #include <iostream> #include <set> #define N 100005 using namespace std; set<int&g
-
番号がC++のミステリー番号であるかどうかを確認します
ここでは、番号がミステリー番号であるかどうかを確認する方法を説明します。ミステリーナンバーは、2つの数字の合計で表すことができる数字であり、数字は互いに逆になります。より良いアイデアを得るためにコードを見てみましょう。すべてのペアをチェックして、決定を見つける必要があります。 例 #include <bits/stdc++.h> using namespace std; int revNum(int str) { string s = to_string(str); reverse(s.begin(), s.end()); &nb