我是靠谱客的博主 文静飞机,最近开发中收集的这篇文章主要介绍长度为n的整数数组循环左移右移m位,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

长度为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位所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部