程式設計c將陣列的元素右移m個位置,要一步到位

2022-12-12 06:36:19 字數 4916 閱讀 9136

1樓:胡桃木璇

一次性完成移動的思想:由於陣列的儲存方式,不能用交換資料來完成,想將a[0]移到a[3]即a[(0+3)%5],必須先將a[3]移到a[1],在這之前要將a[1]移到a[4],在這之前要將a[4]移到a[2],在這之前要將a[2]移到a[0],我們先將a[0]單獨儲存起來,這樣移動順序為a[2]到a[0],a[4]到a[2],a[1]到a[4],a[3]到a[1],最後將儲存的a[0]賦給a[3];a[(0+3)%5]可以用公式a[(i+m)%n]來表示,由此可以寫出程式

#include

#define n 5

void main()

printf("逆序後陣列a=");

for(i=0;i

printf("\n");

//將陣列a的元素右移m個位置,一步到位

for(i=0;i

int temp=a[0];//將a[0]儲存起來

int k=0;

int m;

printf("請輸入要向後移動的位數:");

scanf("%d",&m);do}

a[k]=a[b];//將a[b]移動到a[k],第一步時將a[2]移動到a[0]

k=b;//第一步移動完成後k=0變為b=2以此類推

}while(k!=0);

a[(0+m)%n]=temp;

printf("右移後陣列a=");

for(i=0;i

printf("\n");

//定義第二個陣列b,將a中的元素直接放到b中合適的位置,全做好後,再把b拷貝回a。

for(i=0;i

int b[n]=;

for(i=0;i

for(i=0;i

printf("右移後陣列a=");

for(i=0;i

printf("\n");

}本程式陣列資料移動法只能解決奇數元素個數的陣列,偶數的陣列不能完全實現,陣列是偶數時情況太多,不如用新建陣列相互拷貝的方法。

其實本題用遞迴要好一點,不過那需要用到函式呼叫,這兒就不寫了

覺得好,望採納

2樓:

不用寫註釋了吧?

檔名.cpp

#include

#define nn 5

void main()

printf("\n逆序後陣列a=");

for (i=0;i

printf("\n");}

c++:有n個整數,現在將前面各數順序向後移m個位置,最後m個數變成最前面m個數,並輸出

3樓:匿名使用者

#include

#define n 10 //預定義陣列長度,可以設定大點,或者直接用動態陣列

using namespace std;

int main()

; //測試陣列,方便除錯程式用

int *p,m;

int t,k,i=0;

cin>>m;//輸入移動位置m

//注意m值範圍,必要時做個資料合法檢查

k=1;

while(k<=m)

*p=t;//移完後,陣列首位會空出來,把末尾數回填到首位++k; //上面右移操作做m次,用k做計數器,k==m跳出迴圈}for(i=0;i!=n;++i)//輸出陣列,驗證結果cout<

測試結果,移動4個位置:

要求將一維陣列a[]中的元素迴圈右移m次,如a[]={1,2,3,4,5}右移3次a[]={3,4,5,1,2},求指點**有何問題。

4樓:嘿_行

小錯誤,細心一下就可以瞭如下:while迴圈後的這句是多餘的 a[i]=b[i]; 最後的輸出應該是b[i]不是a[i] 更改:for(i=0;i

5樓:王愛飛

你把**改成下面的樣子吧,就可以了

#include

#include

#define n 5

int main()

i++;

}for(int iter = 0; iter < n; iter++)

a[iter]=b[iter];

printf("右移後陣列a=");

for(i=0;i

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

printf("\n");

system("pause");

return 0;}

6樓:匿名使用者

#define max_len 1000

void loopmove(char* pstr,int m)

這個比較簡單。。。

7樓:

請將a[i]=b[i];改成 *a=&b; 就行。

c語言編寫程式,將一維陣列中的元素向右迴圈移動n次

8樓:匿名使用者

#include

void move(int *a,int*b,int n)printf("移動後:\n");

for(int k=0;k!=10;++k)printf("%d ",b[k]);

}int main()

;int b[10]=;

int n;

printf("輸入移動位置數:\n");

scanf("%d",&n);

move(a,b,n);

return 0;}

9樓:匿名使用者

main()

x=a[n-1];

for(i=n-1;i>0;i--)

a[i]=a[i-1];

a[0]=x;//這是完成一次循zhi

環右移我覺得你的移動沒實現dao

把當前的值放進去啊~~

將a陣列中第一個元素移到陣列末尾,其餘資料依次往前平移一個位置.c++程式設計

10樓:

2035:【例5.2】平移資料

時間限制: 1000 ms 記憶體限制: 65536 kb

提交數: 5721 通過數: 3810【題目描述】

將a陣列中第一個元素移到陣列末尾,其餘資料依次往前平移一個位置。

【輸入】

第一行為陣列a的元素個數;

第二行為n個小於1000的正整數。

【輸出】

平移後的陣列元素,每個數用一個空格隔開。

【輸入樣例】

101 2 3 4 5 6 7 8 9 10【輸出樣例】

2 3 4 5 6 7 8 9 10 1

#include

using namespace std;

int n,i,a[10000];

int main()

11樓:折柳成萌

var a:array[1..100]of integer;

x,n,i:integer;

begin

readln(n);//讀入n個數

for i:=1 to n do

read(a[i]);

x:=a[1];//取出第一個數

for i:=2 to n do

a[i-1]:=a[i];//依次向前移動一位a[i]:=x;

for i:=1 to n do

write(a[i],' ');//輸出

end.

c++ 編寫將陣列的前n個元素中,前端的m個元素和隨後的n-m個元素互換的程式。要求程式不另用其他工作陣列,

12樓:弈軒

|執行效果如圖:

第一張m=3的:

第二張m=-4的(右移4):

源**如下:

#include

using namespace std;

typedef unsigned int uint;

typedef int element;

void shift_arr(element* arr, uint len, int left)

arr[j1] = temp; --c;

++i;

} while (c > 0);

}int main()

;shift_arr(a, len, -4);

int i = 0; while (true)return a; //a和b的最大公約數}typedef int element;

void shift_arr(element* arr, uint len, int left)

arr[j1] = temp;} }

13樓:gta小雞

#include

void reverse(int a, int from, int to)

{for(int i=from, j=to-1; i

c++:將a陣列中最後一個元素移到陣列最前面,其餘資料一次往後平移一個位置。 急急急!

14樓:匿名使用者

void move(int* arr, int len)

arr[0] = tmp;}

15樓:天枰非官

void shift(){

for (int i=1;i

C編寫將陣列的前n個元素中,前端的m個元素和隨後的n m個元素互換的程式。要求程式不另用其他工作陣列

執行效果如圖 第一張m 3的 第二張m 4的 右移4 源 如下 include using namespace std typedef unsigned int uint typedef int element void shift arr element arr,uint len,int left...

C語言程式設計把含有整數的陣列元素按逆序排列並輸出。求專業人

include void reverse int x,int len int main i reverse a,10 for i 0 i 10 i printf d a i printf n return 0 c語言將陣列a中的10個整數降序排列並輸出,如何程式設計?這個是自己輸入10個整數,不想自...

C語言程式設計問題 給陣列中的元素按順序編號

最直接的辦法,用一個陣列來作hash,時間複雜度最低,但是有最大值的限制,如下 include define max num 10000 define n 10 int main int a n i,j int max 0 for i 0 i max num b a i 1 if a i max i...