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

2021-06-26 15:55:34 字數 1011 閱讀 5547

**如下:

#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 [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 l...

不定長陣列 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...