概述
长度为n的整数数组循环左移m位
右移m相当于左移n-m
// pat.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <iostream>
void MoveLeft(int a[],int n,int m);
int _tmain(int argc, _TCHAR* argv[])
{
int old[9]={1,2,3,4,5,6,7,8,9};
int *p;
int out[9];
MoveLeft(old,9,6);
for(int i=0;i<9;i++)
{
printf("%dn",old[i]);
}
int a;
std::cin>>a;
return 0;
}
void MoveLeft(int a[],int n,int m)
{
int temp = a[0];
for(int i=0;i<n-1;i++)
{
a[i]=a[i+1];
}
a[n-1]=temp;
m--;
if(m>0)
MoveLeft(a,n,m);
else return;
}
更美:
算法解释:
前(n-m)位数字直接向右移动m; i—-i+m
后m位数字 ;j—-j-(n-m)
一次reverse 把i—n-m-1-i
二次reverse 把j—2n-m-1-j
最后reverse得到结果
#include <stdio.h>
int a[100];
void reverse(int *a, int m, int n){
for (int i = m; i <= (m + n) / 2; i++){
int tmp = a[i];
a[i] = a[m + n - i];
a[m + n - i] = tmp;
}
}
int main(){
int n, m;
scanf("%d%d", &n, &m);
m %= n;
for (int i = 0; i < n; i++)
scanf("%d", &a[i]);
reverse(a, 0, n-m-1);
reverse(a, n-m, n-1);
reverse(a, 0, n-1);
for (int i = 0; i < n; i++)
printf("%d%s", a[i], (i-n+1?" ":"n"));
return 0;
}
最后
以上就是文静飞机为你收集整理的长度为n的整数数组循环左移右移m位的全部内容,希望文章能够帮你解决长度为n的整数数组循环左移右移m位所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复