2010年计算机联考真题——一维数组循环左移

原创 2017年08月07日 20:17:09

前记


从七月份决定开始考研,中间由于听报告,回家复习数学和政治而耽误了一些时间。自己准备报考山东大学计算机技术的专硕,幸好是数学是考数学二,专业课也只有一门数据结构,这位我的复习节省了很多时间,不想数学一和统考的计算机基础综合的专业复习那么费劲。现在数据结构的复习完全是参照《王道考研系列——2018年数据结构考研复习指导》在复习。对于数据结构虽然到时候是手写算法,但是毕竟这是编程,对于算法能否正确实现并符合题目要求,只有跑程序才能看见。所以复习的同时,有也想利用好csdn博客来记录自己复习过程,故现在开始把指导书上的所有题与基础算法和数据结构利用博客来记录一下。


题目


设将n(n,1)个整数存放到一维数组R中,试设计一个在时间和空间两方面尽可能有效的算法,将R中保有的序列循环左移P(0﹤P﹤n)个位置,即将R中的数据由(X0 X1 ……Xn-1)变换为(Xp Xp+1 ……Xn-1 X0 X1 ……Xp-1)要求:

  (1)给出算法的基本设计思想。

  (2)根据设计思想,采用C或C++或JAVA语言表述算法,关键之处给出注释。

  (3)说明你所设计算法的时间复杂度和空间复杂度


思路


对于这个问题:可以把问题转化为把数组的前p个数与后n-p个数进行位置互换。即把后n-p个数整体放到前p个数的前面即可。


代码

#include <iostream>
#include <string>
#include <cstring>
#include <cmath>
#include <cstdlib>
#include <cstdio>
#include <algorithm>
using namespace std;

//把下标在[left,right]的数进行逆置 
bool Reverse(int* A ,int left , int right , int size)
{
    if(left >= right || right >= size)
        return false;
    int mid = (left+right)/2;
    for(int i = 0 ; i < mid - left ; i++){
        A[i+left] += A[right-i];
        A[right-i] = A[i+left] - A[right-i];
        A[i+left] -= A[right-i];
    }
    return true;
}

//把前m个数与后n个数互换位置 
void Exchange(int* A ,int m, int n ,int size) 
{
    Reverse(A,0,m+n-1,size);        //下标0~m+n-1的数逆置
    Reverse(A,0,n-1,size);          //下标0~n-1的数逆置
    Reverse(A,n,m+n-1,size);        //下标n~m+n-1的数逆置 
}

int main()
{
    int a[7];
    for(int i = 0 ; i < 7 ; i++){
        a[i] = i+1;
    } 

    cout<<"对换前"<<endl;
    for(int i = 0 ; i< 7 ; i++){
        cout<<a[i]<<" ";
    }
    cout<<endl;

    Exchange(a ,3,4,7);
    cout<<"对换后"<<endl;
    for(int i = 0 ; i< 7 ; i++){
        cout<<a[i]<<" ";
    }
    cout<<endl;

    return 0;
}

这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载。若需转载,请注明http://blog.csdn.net/qq_30091945 举报

相关文章推荐

2010年计算机联考真题——一维数组循环左移

前记从七月份决定开始考研,中间由于听报告,回家复习数学和政治但无论一些时间。自己准备报考山东大学计算机技术的专硕,幸好是数学是考数学二,专业课一直有一门数据结构,这位我的复习节省了很多时间,不想数学一...

循环数组左移

给定一个数组,左移k位。 这一题,我开始是这样考虑的,每一位都应该直接移动到 (i-k+n)%n位。 所以代码如下: import java.util.Scanner; public class...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

数组左循环移位算法

今天开始将持续更新关于C/C++的一个数据结构的博客更新 无奈考研会要求到有一个数据结构神一样的存在,今晚晚上重新回顾了我那不堪回忆的C/C++代码编写,只有一句话可以表达我的感受,那就是:人生苦短...

循环结构及数组

循环结构 while循环/do..while循环while循环 while循环主体只有一个语句时,可以省略大括号。在while循环语句中只有一个判断条件,它可以是任何表达式。当判断条件的值为真,循环...

【算法】将一维数组arr中的元素循环左移p个位置

要准备考研了,现在也开始看专业课了。传统的数据结构和算法啊!现在也在看书,看一些做一些记录吧,也算是积累,不仅仅是考研,说不定以后也用的上~   今天要谈的是【将一维数组中的元素循环左移P个元素】  ...

1008. 数组元素循环右移问题 (20)——数组循环移动算法

1、题目描述 一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0 A1……AN-1)变换为(AN-M …… AN-1...

循环左移&循环右移

编辑这篇花了好久,不是想题目,主要是用博客不久,很多功能都不太熟悉。加上xind也不是特别会用(流程图画的特蹩脚,望大神帮忙)。这一来二去耽误了好久。 我希望开个练习版块把自己平时学C语言遇到的问题记...

数组循环左移或右移(数组翻转)

今天练习了一道编程题:数组翻转或者说是数组循环移动。 例如有数组A:1,2,3,4,5,循环左移动2位变成:3,4,5,1,2。 此题的解法很简单也很巧妙,首先将数组逆置 变为 5 4 3 2 1...

1. 循环左移

题目:对于有n个元素的数组 int a[n]={....};写一个高效算法将数组内容循环左移m位。比如: int a[6] ={1,2,3,4,5,6} ,循环左移3位得到结果{456123} ht...

2010年北京大学计算机研究生机试真题

http://ac.jobdu.com/problem.php?pid=1149   子串计算 #include #include #include #include using namespace...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)