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

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

WBOY
發布: 2023-09-15 09:17:02
轉載
1041 人瀏覽過

在一個擴展矩陣中,傳回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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板