方法一:先将最后m个数保存在新的b数组中,然后将n-m个数拉至原数组a尾部,再将b数组依次赋值给a数组的前m个数。
#include<stdio.h>
#define N 80
int main(){
int a[N],b[N],i;
int n,m;
printf("input the n and m:\n");
scanf("%d %d",&n,&m);
for(i=0;i<n;i++){
scanf("%d",&a[i]);
}
for(i=0;i<m;i++){
b[i]=a[n-m+i];//将最后m个数保存在数组b中
}
for(i=n-1;i>=m;i--){
a[i]=a[i-m];//将n-m个数拉至数组a的尾部
}
for(i=0;i<m;i++){
a[i]=b[i];//将保存在数组b中的最后m个数赋值回数组a的前m个位置
}
printf("After move,the array now:\n");
for(i=0;i<n;i++){
printf("%-3d",a[i]);
}
return 0;
}
方法二:将数组元素整体后移m个位置,然后将尾部的m个元素移动到数组前m个位置。
#include<stdio.h>
main()
{
char a[100];
int i=0,c=0,j=0,m;
printf("输入m:");
scanf("%d",&m);
printf("输入整数:");
for (i=0;;i++)
{
scanf("%d",&a[i]);
c++;
if (getchar()=='\n')
break;
}
for (i=c-1;i>=0;i--)
a[i+m]=a[i];//所有元素后移m位
for (i=c;i<c+m;i++)
a[j++]=a[i];//将数组尾部的m个元素移动至数组前m个位置
for (i=0;i<c+m;i++)
printf("%3d",a[i]);
putchar('\n');
}
方法三:使用递归函数进行移位
#include<iostream>
using namespace std;
int main()
{
void move(int *array,int n,int m); //函数声明
int number[20]; //定义数组长度为20的数组
int i,n,m;
cout<<"请输入要输入多少个数:"<<endl;
cin>>n;
cout<<endl<<"请输入"<<n<<"个整数:"<<endl;
for(i=0;i<n;i++)
{
cin>>number[i];
}
cout<<endl<<"请输入要后移多少位置:"<<endl;
cin>>m;
move(number,n,m); //函数调用
cout<<endl<<"后移后的排序为:"<<endl;
for(i=0;i<n;i++) //输出元素
{
cout<<number[i]<<" ";
}
cout<<endl;
return 0;
}
//这是使循环后移一次,通过m调节后移几次
void move(int *array,int n,int m) //使循环后移一次的函数
{
int *p,array_end; //定义一个指针变量p,和一个变量array_end
array_end=*(array+n-1); //将array中的最后一个元素的值赋给array_end
for(p=array+n-1;p>array;p--) //从数组最后一个元素开始向前 把前一个元素的值赋给后一个元素
{
*p=*(p-1);
}
*array=array_end; //将array_end的值赋给第一个元素的值 因为之前将最后一个元素的值赋给了array_end
m--; // 通过m控制此函数执行几次 从而后移几个数
if(m>0)
{
move(array,n,m); //递归调用,当循环次数m减至为0时,停止调用
}
---------------------
作者:宾宾琪琪
来源:优快云
原文:https://blog.youkuaiyun.com/liubinzi123/article/details/8261555
版权声明:本文为博主原创文章,转载请附上博文链接!