有個n整數,儲存在陣列array中,使其前面各數順序向後移動m個位置,最後的m個數變成最前面的m個數,並輸出

時間 2021-10-26 17:56:36

1樓:匿名使用者

忘掉你的指標吧。

移動後的結果,只是array陣列的重新排列。結果:array[10]=;

最後輸出也只是將重新排列好的陣列列印出來。

假如寫成這樣:

--------------------------int array=;

move(array);//move()乾的是按要求排列陣列的活for(i=0;i<6;i++)

printf("%d",array[i]);

---------------------------是否就不存在困擾呢?

2樓:開心的平凡果

你問的這個問題是計算機專業2023年的考研題,第42題。

時間複雜度和空間複雜度都最小的一種演算法:

演算法思路:

將陣列array[n]的n個元素原地逆置,變為(array_n-1,array_n-2,...,array_m,

arry_m-1,...,array_0),然後再將前n-m個元素原地逆置(得到arry_m,array_m+1,...,array_n-1)和後m個元素原地逆置(得到arry_0,array_1,...

,array_m-1),即得到最終結果。每個資料僅需挪動兩次,所以時間複雜度為o(n);除函式引數佔用空間外,僅用2個整型變數,所以空間複雜度為o(1).

演算法實現(關鍵**):

//逆置

void reverse(int array, int left, int right)}

3樓:手機使用者

e using namespace std;

int main()

c語言有n個整數,使前面各數順序向後移m個位置,最後m個數變成最前面m個數

4樓:匿名使用者

當q=0,a[q]=a[q-1]?你猜

每次a[m]=a[m+1],與q沒關係,q根本沒有用#include

# define n 10

void main()

;int n,i;

void change(int *a,int n);

printf("原陣列為:");

for(i=0;i

c語言對於有n個整數的陣列,使其前面各數順序向後移m個位置,讓最後m個數變成最前面的m個數!

5樓:

#include

#define n 10

int main()

a[k]=temp;

}for(i=0;i

printf("%d ",a[i]);}

6樓:匿名使用者

處理這個問題的方法有好多寫法,關鍵看你是一次移動一個位置還是多個位置要是一個位置,那麼只要設一個tmp變數就好要是一次移動多個位置,那麼就要再設定一個陣列一次移動一個位置,那麼迴圈移動m次就好了,for(i=0;i

要是移動多個位置,那麼最好重新賦值一個陣列for(i=0;i

b[i+n-m]=a[i];

for(i=m;i

b[i]=a[i-m];

c語言:有n個整數的陣列,編寫程式使其前面各數順序向後移m個位置,最後m個數變成最前面m個數。

7樓:匿名使用者

#include

void main()

printf("輸入要移動的位置數:");

scanf("%d",&m);--->這句也沒錯,最好在其下加入一句:m%=10;

for(i=0;i=0;j--)

就該應在這時:s[0]=b

}for(i=0;i<10;i++)

printf("%d ",s[i]);

putchar('\n');}}

8樓:匿名使用者

/*要實現這個功能只需要改一個地方:for(j=8;j>=0;j--)將這句話中的

s[0]=b移到迴圈外面就可以了,因為這個程式中s[0]也參與運算,s[0]的原來的值將賦給後面的

s[1],迴圈體內執行s[0]=b;則過早的將s[9]的值給了s[0],導致結果錯誤,應該先移動好,再將原來s[9]的

值給s[0].除了這個以外,還有幾個可以優化的地方:for(i=0;i<10;i++)

這裡直接寫for(i=0;i<10;i++)就行了,沒必要用一個臨時變數, scanf("%d",&m);

如果使用者輸入大於10的數,那迴圈就會多做幾次,所以可以加一句m=m%10或將外層迴圈條件改為for(i=0;i

void main()

printf("輸入要移動的位置數:");

scanf("%d",&m);

for(i=0;i=0;j--)

s[0]=b;

}for(i=0;i<10;i++)

printf("%d ",s[i]);

putchar('\n');}

9樓:匿名使用者

#include

void main(void)

*(p++) = t; //把儲存的第一個值給最後p = head; //p指回第一個值m--; //完成一次迴圈,m減一

} for(i=0; i

printf("%d ", a[i]);}

10樓:匿名使用者

你新建一個陣列s'[10],使s'[(i+m)%10]=s[i],然後再把s'賦值給s,如果不是要求必須用那個方法的話這個會比較容易理解也容易做吧。

串列埠接收資料怎樣儲存在陣列中呢

dim buffer as variant 表示宣告瞭一個buffer變數,但是這個buffer變數的型別不確定,可以是long integer double object string以及陣列等等,buffer變數的型別由編譯器自行判斷與轉換。dim buffer 100 as variant 表...

c語言 有n個整數的陣列,編寫程式使其前面各數順序向後移m個

include void main printf 輸入要移動的位置數 scanf d m 這句也沒錯,最好在其下加入一句 m 10 for i 0 i 0 j 就該應在這時 s 0 b for i 0 i 10 i printf d s i putchar n 要實現這個功能只需要改一個地方 for...

c 如何將多個類儲存在陣列中,c 如何將多個類儲存在乙個陣列中

所謂陣列,就是相同資料型別的元素按一定順序排列的集合,就是把有限個型別相同的變數用乙個名字命名,然後用編號區分他們的變數的集合,這個名字稱為陣列名,編號稱為下標。所以在陣列中只能儲存相同型別的類物件。要儲存多個物件,只需要定義乙個類物件陣列,然後賦值進去即可。如類名為a,要儲存最多100個物件,需要...