自測 3 陣列元素迴圈右移問題

2021-10-01 05:55:44 字數 1489 閱讀 5446

這一次的題目有著最高的通過率,但是卻是我花時間最久的一道題。。。首先我的方向走錯了,最開始我想到了以前遇到的一種用少的變數交換陣列的題目,但是這兩個完全是不同的解題思路,這裡我就花費了很長時間才走回正常的思路,然後是我自己想岔了一種情形,我把一種在特殊的情形下適用的規律當作了普遍規律,這也導致了我再次犯錯,然後我通過不斷地一步步地除錯找出了問題出在了**,找到問題後,我又想不到該怎麼解決這一問題,這使得我這道題花費了非常長的時間,可能比前兩道題加起來還要多。我的經驗教訓就是:

1.學會一步步地除錯,列印輸出觀察

2.不要盲目地模擬思路,一定要讀懂題目,先嘗試用最簡單的方法去實現這個問題

3.一定要想明白總結的規律是否具有普遍性,實在不行多舉幾個例子試試

4.一定要想明白自己當前遇到的問題是什麼,將大的問題拆分成乙個個小的問題,保持自己的思路清晰。遇見暫時無從下手的問題,不如發散思維,多想想各種各樣的思路。

#include

using namespace std;

int compute_dst(int i, int n, int m);

int main()

int n = 0, m = 0;

cin >> n >> m;

m = m % n;

int *a = new int[n];

for (int i_a = 0; i_a < n; i_a++)

cin >> a[i_a];

int v = a[0];

int j = v;

int i = 0;

int cnt = 0;

int initial_i = 0;

int dst = compute_dst(i, n, m);

doj = a[dst];

a[dst] = v;

i = dst;

v = j;

dst = compute_dst(i, n, m);

if (initial_i == i)

i++;

initial_i = i;

dst = compute_dst(i, n, m);

v = a[i];

for (int i_a = 0; i_a < n; i_a++)

cout << a[i_a] << ' ';

cout << "\n";

cnt++;

while (cnt != n);

for (int i_a = 0; i_a < n-1; i_a++)

cout << a[i_a] << ' ';

cout << a[n - 1];

delete a;

return 0;

int compute_dst(int i, int n, int m)

int dst;

if (i >= (n - m))

dst = i - n + m;

else

dst = i + m;

return dst;

自測3 陣列元素迴圈右移問題

乙個陣列a中存有n n 0 個整數,在不允許使用另外陣列的前提下,將每個整數迴圈向右移m m 0 個位置,即將a中的資料由 a0 a1 an 1 變換為 an m an 1 a0 a1 an m 1 最後m個數迴圈移至最前面的m個位置 如果需要考慮程式移動資料的次數盡量少,要如何設計移動的方法?輸入...

自測 3 陣列元素迴圈右移問題

乙個陣列 a中存有n 0 個整數,在不允許使用另外陣列的前提下,將每個整數迴圈向右移m 0 個位置,即將 a中的資料由 a 0 a 1 a n 1 變換為 a n m a n 1 a 0 a 1 a n m 1 最後 m個數迴圈移至最前面的 m個位置 如果需要考慮程式移動資料的次數盡量少,要如何設計...

自測 3 陣列元素迴圈右移問題

乙個陣列a中存有n 0 個整數,在不允許使用另外陣列的前提下,將每個整數迴圈向右移m 0 個位置,即將a中的資料由 a 0 a 1 a n 1 變換為 a n m a n 1 a 0 a 1 a n m 1 最後m個數迴圈移至最前面的m個位置 如果需要考慮程式移動資料的次數盡量少,要如何設計移動的方...