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 執行效果如圖 第一張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... 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個整數,不想自... 最直接的辦法,用一個陣列來作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...C編寫將陣列的前n個元素中,前端的m個元素和隨後的n m個元素互換的程式。要求程式不另用其他工作陣列
C語言程式設計把含有整數的陣列元素按逆序排列並輸出。求專業人
C語言程式設計問題 給陣列中的元素按順序編號