算法思想:就是将一个一维数组的元素依次进行左移
列如:[1,2,3,4,5,6]
左移一位:[2,3,4,5,6,1]
左移两位:[3,4,5,6,1,2]
左移三位:[4,5,6,1,2,3]
不难看出我们已经发现了规律,就是首先将所有元素逆置[6,5,4,3,2,1]
假设这里循环三次(left=3),逆置所有元素后,再将[0,n-left-1]进行逆置得到数组[4,5,6,3,2,1]
最后再将[n-lfet,n-1]进行逆置得到要的答案
#include<stdio.h>
#include<stdlib.h>
int a[7]={1,2,3,4,5,6,7};
int n=7;
void reverse(int a[],int start,int end){
//逆置数组
for(int i=start;i<=(start+end)/2;i++){
int temp=a[i];
a[i]=a[start+end-i];
a[start+end-i]=temp;
}
}
void prin(int a[]){
for(int i=0;i<n;i++){
printf("%d",a[i]);
}
printf("\n");
}
//进行调用reverse函数,来判定左移几次
void change(int a[],int left){
printf("全部逆置\n");
reverse(a,0,n-1);
prin(a);
printf("前n-left个逆置\n");
reverse(a,0,n-left-1);
prin(a);
printf("后left个逆置\n");
reverse(a,n-left,n-1);
prin(a);
}
int main(){
printf("一开始的数组\n");
prin(a);
change(a,3);
return 0;
}
如果对你有帮助,不要忘记点赞哦!欢迎有问题评论区留言讨论