方法一:先將最後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時,停止調用
}
---------------------
作者:賓賓琪琪
來源:CSDN
原文:https://blog.csdn.net/liubinzi123/article/details/8261555
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!