設有n個整數,現在要使前面各數順序向後移m個位置,最後m個數變成最前面m個數。

方法一:先將最後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 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章