不定長陣列取值交叉遍歷組合生成演算法

2021-09-07 10:38:20 字數 1221 閱讀 7352

**例如以下:

#include

int factor[3][4] =

, , 

, };

int lengths[3] = ; 

void recurisionaccess(int factor[3][4], int lengths[3], int colum, int row) {

int i = 0;

int j = 0;

int k = 0;

int len = 0;

int len_num = 0;

int totallength = 1;

for (i=0; i每一位上的值代表著在相應的那一行的乙個位置。

比如十進位制的789。7實際上是百位上的餘值,它在該位的意義是7x10x10,8的意義為8x10。9為

最低位餘值。沒有10能夠乘了。

所以[2][1][3],混合進製,進製分別為【3,2。4】。[2][1][3]在每一位上的值,實際上是本

位的餘值,是低位們相乘的值。

即,15 => [1][1][3]。即1x2x4 + 1x4  + 3 => 15

23 => [2][1][3],即2x2x4 + 1x4  + 3 => 23

對於23,即[2][1][3]。我們理解為最低位是4進製,次低位為2進製,最高位為3進製。

所以依照例如以下方式取得每一位的值

1.第1行是最低位,4進製,先同4 取餘獲得餘值3,即位置值為:3

再除以4越過該位:[2][1][3] 變為 [2][1]。

2.第2行是次低位。2進製,先同2 取餘獲得餘值1。即位置值為:1

再除以2越過該位:[2][1] 變為 [2]。

3.第3行是最高位。3進製,先同3 取餘獲得餘值2,即位置值為:2

再除以3越過該位:[2] 變為 空。

這樣3個位置值都獲取到了。即我們不把23單純當做23,而是將它看做[2][1][3]。從而通過以

上的方式獲取到各個行中的位置也就是3,1,2。

總結:將位置3x2x4的24種組合理解為[0-2] [0-1] [0-3]的三個方框的組合方式,把每乙個方框看成一

位的話。那個方框就使用了乙個固定的進製,所以0 -- 23 之間的值都能夠用三個位表示,

每一位就代表在每乙個方框中的取值,也即在二維陣列中的位置。

而0 -- 23這24個值恰好覆蓋了三個方框全部種組合,所以用這樣的多進製組合位的方式能夠實現多組值得交叉遍歷。

不定長陣列取值交叉遍歷組合生成演算法

如下 include int factor 3 4 int lengths 3 void recurisionaccess int factor 3 4 int lengths 3 int colum,int row int i 0 int j 0 int k 0 int len 0 int len...

不定長陣列 vector

使用需要包含標頭檔案 include vector是乙個模板類,所以需要用vectora或者vectorb這種方式宣告。vector的常用操作 int len a.size 返回vector長度 a.resize 100 把a長度變為100 a.push back 10 把10新增到尾部 a.pop...

不定長陣列 vector

vector是乙個不定長陣列模板類,所以需要用vectora或者vectorb這樣的方式來進行宣告乙個vector。vector是乙個類似於int a的整數陣列,而vector就是乙個類似於string a的字串陣列。使用vector時要加 include標頭檔案 常用的vector陣列的方法有 i...