#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 來代替。這種問題其實就是字母向後 或向前 移動的問題。這裡的偏移量是...