使用指定约束查找矩阵最后一个数值的 C++ 程序


假设我们有一个包含 N 个元素的数字列表 A。元素为 1、2 或 3,考虑一个数字 X[1][j] = A[j],其中 j 在 1 到 N 的范围内。并且 X[i][j] = |X[i-1][j] - X[i-1][j+1]|,其中 i 在 2 到 N 的范围内,j 在 1 到 N+1-i 的范围内。我们必须找到 X[i][j] 的值。

因此,如果输入为 A = [1,2,3,1],则输出将为 1,因为

X[1][1] to X[1][4] are 1, 2, 3, 1
X[2][1], X[2][2], X[2][3] are |1-2| = 1, |2 - 3| = 1 and |3 - 1| = 2
X[3][1], X[3][2] are  1  1 = 0,  1  2 = 1.
X[4][1] = |0 - 1| = 1
So the answer is 1

为了解决此问题,我们将遵循以下步骤 −

Define a function calc(), this will take N, M,
cnt := 0
for initialize k := N, when k is non-zero, update k >>= 1, do:
   cnt := floor of (cnt + k)/2
for initialize k := M, when k is non-zero, update k >>= 1, do:
   cnt := floor of (cnt - k)/2
for initialize k := N - M, when k is non-zero, update k >>= 1, do:
   cnt := floor of (cnt - k)/2
return invert of cnt
From the main method, do the following
n := size of A
Define an array arr of size (n + 1)
for initialize i := 1, when i < n, update (increase i by 1), do:
   arr[i - 1] = |A[i] - A[i - 1]|
(decrease n by 1)
hh := 1, pd := 0, ck := 0
for initialize i := 0, when i < n, update (increase i by 1), do:
   if arr[i] is non-zero, then:
      if arr[i] is same as 1, then:
         hh := 0
         pd := pd XOR calc(n - 1, i)
      Otherwise
         ck := ck XOR calc(n - 1, i)
ck := ck AND hh
if pd XOR ck is non-zero, then:
   return "1" + hh
return "0"

示例

让我们了解如下实现以获得更好的理解 −

Open Compiler
#include <bits/stdc++.h> using namespace std; int calc(int N, int M) { int cnt = 0; for (int k = N; k; k >>= 1) cnt += k >> 1; for (int k = M; k; k >>= 1) cnt -= k >> 1; for (int k = N - M; k; k >>= 1) cnt -= k >> 1; return !cnt; } string solve(vector<int> A) { int n = A.size(); vector<int> arr(n + 1); for (int i = 1; i < n; i++) { arr[i - 1] = abs(A[i] - A[i - 1]); } --n; bool hh = 1, pd = 0, ck = 0; for (int i = 0; i < n; i++) if (arr[i]) { if (arr[i] == 1) hh = 0, pd ^= calc(n - 1, i); else ck ^= calc(n - 1, i); } ck &= hh; if (pd ^ ck) return "1" + hh; return "0"; } int main(){ vector<int> A = { 1, 2, 3, 1 }; cout << solve(A) << endl; }

输入

{ 1, 2, 3, 1 }

Explore our latest online courses and learn new skills at your own pace. Enroll and become a certified expert to boost your career.

输出

1

更新于:2022-2-25

120 次浏览

开启您的职业生涯

完成课程获得认证

开始
广告