1. 程式人生 > >ZZULIOJ 1162: 迴圈移動(指標專題)

ZZULIOJ 1162: 迴圈移動(指標專題)

題目描述有n個整數,使前面各數順序向後移動k個位置,移出的數再從開頭移入。輸出移動後的陣列元素。

題目沒有告訴你n的範圍,希望你讀入n之後用malloc()函式動態申請記憶體空間,不要提前定義陣列的大小。不要偷懶哦。

另外要求定義並使用函式ringShift()

void ringShift(int *a, int n, int k)

{

//迴圈移動後的數值仍然存入陣列a中

}
輸入輸入分3行,第一行是一個整數n,第二行是n個整數,用空格隔開。第三行是一個整數k。
輸出輸出n個整數,由空格隔開。輸出佔一行。
樣例輸入6
1 2 3 4 5 6
2
樣例輸出5 6 1 2 3 4

#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
void ringShift(int *a,int n,int k);
int main(){
 int n,k,i;
 cin>>n;
 int* a=(int *)malloc(sizeof(int)*n);
 for(i=0;i<n;i++)
 cin>>*(a+i);
 cin>>k;
 ringShift(a,n,k);
 return 0;
}
void
ringShift(int *a,int n,int k){ int* b=(int *)malloc(sizeof(int)*n); int i; for(i=0;i<k;i++){ b[i]=a[n-k+i]; } int c=0; for(i=k;i<n;i++){ b[i]=a[c++]; } for(i=0;i<n;i++){ printf("%d ",b[i]); } }