陣列的移動問題

2021-10-18 18:01:11 字數 1566 閱讀 6624

#include

#include

void

left_move_array

(int

* a,

int size)

//陣列向左移一位

a[size -1]

= temp;

//首元素置於陣列末尾

return;}

void

right_move_array

(int

*a,int size)

//陣列向右移一位

a[0]= temp;

//末尾元素置於陣列首位

return;}

void

left_move_array_key

(int

* a,

int size,

int k)

//左移k位

}else

}return;}

void

right_move_array_key

(int

* a,

int size,

int k)

//右移k位

intmain()

;right_move_array_key

(ar, n,3)

;for

(int j =

0; j < n;

++j)

return0;

}

上述**時間複雜度較大,下面我們來看一種複雜度較小的解法,以左移為例。假如要講乙個陣列左移k位,我們可以將陣列從下標k處分開,將0到k-1下標分為一組,將k到n-1分為一組,然後將每個陣列最左邊元素(設為left)和最右邊元素(設為right)交換,然後left++且right- - ,直至left = right時為止,然後再將整個陣列的兩端元素兩兩交換即可完成。

例如乙個陣列ar = ,要左移4位,我們可以把下標為0~3的元素,即1 2 3 4 分為一組,剩下的元素分為一組,然後兩兩交換使其原地逆置,即變為,再將整個陣列兩兩交換即變為,左移完成,這樣的解法可以將時間複雜度降至o(k)。

**如下:

#include

#include

void

swap

(int

* a,

int* b)

//交換函式

void

resreve

(int

* br,

int left,

int right)

//陣列就地逆置函式

return;}

void

left_move_key

(int

* br,

int k,

int n)

//左移函式

intmain()

;left_move_key

(ar,

4, n)

;for

(int i =

0; i < n;

++i)

return0;

}

陣列移動問題

includevoid shiftleft int pinout,int n pinout tmp void shiftright int pinout,int n pinout tmp void shiftn int pinout,int n,int shiftn else int main in...

控制項移動問題

控制項移動問題 vcl元件開發及應用 我想將文字逐漸顯示,所以在文字上加蓋了乙個shape,然後用timer使得shape.top shape.top 1 但是結果是可以使文字逐漸顯示,但是閃屏嚴重,請高手幫解決一下,謝謝 直接在canvas裡畫 要麼就用雙緩衝 也可以通過定時器來觸發作個例子給你!...

字元移動問題

比如 我們要把字母a,按照字母表向後移動3位 include intmain void 執行結果 常見的習題 簡單的密碼問題 對於明文中的每個字元,將它用它字母表中後 5 位對應的字元來代替,這樣就得到了密文。比如字元 a 用 f 來代替。這種問題其實就是字母向後 或向前 移動的問題。這裡的偏移量是...