首頁  >  文章  >  後端開發  >  在一個擴展矩陣中,傳回C++中的前一個元素

在一個擴展矩陣中,傳回C++中的前一個元素

WBOY
WBOY轉載
2023-09-15 09:17:02961瀏覽

在一個擴展矩陣中,傳回C++中的前一個元素

基於擴展矩陣討論一個問題。擴展矩陣是尺寸以某一因子不斷增加的矩陣。

這裡我們有一個字元矩陣,其尺寸以2的倍數擴展,也就是如果原始矩陣的尺寸是N * N,那麼擴展後的矩陣尺寸變成2N * 2N。我們給出了一個字元序列位於 (i, j) 處,我們需要傳回位於 (i, (j - N - 1)%N) 處的字元序列。

讓我們透過視覺化一些初始擴展矩陣來理解。

Given Matrix -> [ a, b ] [ c, d ], 2 X 2 matrix
Multiplying with { a, b, c, d }
A X [ a, b ]
B X [ a, b ]
C X [ a, b ]
D X [ a, b ]
[ c, d ] [ c, d ] [ c, d ] [ c, d ]

Expanded Matrix -> [ aa, ab, ba, bb ]
[ ac, ad, bc, bd ]
[ ca, cb, da, db ]
[ cc, cd, dc, dd ], 4X4 matrix
To expand again, multiply it by { a, b, c, d } and a matrix of size 8X8 will be formed.

Expanded Matrix - > [ aaa, aab, aba, abb, baa, bab, bba, bbb ]
[ aac, aad, abc, abd, bac, bad, bbc, bbd ]
[ aca, acb, ada, adb, bca, bcb, bda, bdb ]
[ acc, acd, adc, add, bcc, bcd, bdc, bdd ]
[ caa, cab, cba, cbb, daa, dab, dba, dbb ]
[ cac, cad, cbc, cbd, dac, dad, dbc, dbd ]
[ cca, ccb, cda, cdb, dca, dcb, dda, ddb ]
[ ccc, ccd, cdc, cdd, dcc, dcd, ddc, ddd ]

這是兩個初始擴展矩陣;假設我們得到了一個字元序列“bcc”,那麼我們需要返回剛剛剩餘的序列,即“add”。另外,假設矩陣是循環的,即如果給定序列位於(i, 0),則傳回(i, N-1) 處的序列

Input: abb
Output: aba
Explanation: The sequence just left to abb is aba in the 8X8 matrix.

Input: aadc
Output: aacd

Input: abbcd
Output: abbcc

尋找解決方案的方法

首先考慮問題,想到的唯一解決方案是找到包含給定序列但看起來不是很複雜的擴展矩陣。我們需要先形成矩陣,然後搜尋序列。

高效方法

在查看了一些最初擴展的矩陣之後,我們發現了一種模式,透過該模式我們可以看到前一個元素。即

  • 從最後一個索引開始遍歷字元序列。

  • 如果索引元素是 ' b'或'd',然後將其更改為'a'或'c'並停止遍歷數組。

  • 如果索引元素為'a'或'c', ' 將其變更為 'b' 或 'd' 並移至下一個索引並檢查它。

範例

C 程式碼上述方法

#include <bits/stdc++.h>
using namespace std;
int main (){
   string seq = "abbcd";
   int n = seq.length ();
   // traverse through the string from last.
   for (int i = n; i >= 0; i--){
      // if the element is b or d, change them and stop traversing.
      if (seq[i] == &#39;b&#39;){
      seq[i] = &#39;a&#39;;
      break;
   }
   if (seq[i] == &#39;d&#39;){
      seq[i] = &#39;c&#39;;
      break;
   }
   // if an element is b or d, change them and move to the next element.
   if (seq[i] == &#39;a&#39;)
      seq[i] = &#39;b&#39;;
   else if (seq[i] == &#39;c&#39;)
      seq[i] = &#39;d&#39;;
   }
   cout << "The Previous sequence is: " << seq;
   return 0;
}

輸出

The previous sequence is: abbcc

結論

######################################################## #在本文中,我們討論了擴展字符矩陣及其形成方式。我們也討論了在擴展矩陣中尋找前一個元素的問題。我們透過理解擴展字元矩陣所創建的模式解決了這個問題。 ######我們也討論了解決這個問題的 C 程式碼,我們可以用任何程式語言(如 C、Java、Python 等)編寫這些程式碼。我們希望您會發現本教學很有幫助。 ###

以上是在一個擴展矩陣中,傳回C++中的前一個元素的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:tutorialspoint.com。如有侵權,請聯絡admin@php.cn刪除