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年4月25日公务员考试(十二省联考)行测真题及参考答案

2010年4月25日公务员考试(十二省联考)行测真题及参考答案 (云南、湖南、山东、内蒙古、重庆、海南、宁夏、辽宁、广西、陕西、天津、西藏)(考试时间:120分钟) 第一部分数量关系 (共1...

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

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

2010年一月联考数学真题带答案

  • 2010年01月14日 15:14
  • 186KB
  • 下载

数组循环左移

  • 2017年09月07日 14:20
  • 726B
  • 下载

2010年浙江大学计算机及软件工程研究生机试真题 A+B

#include #include #include using namespace std; void Deal(string &s1, string &s2); int main() { ...

循环左移数组元素实现源码

  • 2011年12月07日 17:14
  • 8KB
  • 下载

数组循环左移K位

  • 2013年02月11日 15:54
  • 847B
  • 下载

题目1007:奥运排序问题 2010年浙江大学计算机及软件工程研究生机试真题

题目描述: 按要求,给国家进行排名。 输入: 有多组数据。 第一行给出国家数N,要求排名的国家数M,国家号从0到N-1。 第二行开始的N行给定国家或地区的奥运金牌数,奖牌数,人口...
  • ZJFCLH
  • ZJFCLH
  • 2014年03月15日 00:40
  • 791

2010年浙江大学计算机及软件工程研究生机试真题

http://ac.jobdu.com/problem.php?pid=1006 ZOJ问题 /* 若azbjc 能AC,则azbojac也能AC,其中a,b,c为N个'o'或者为空; 这里azbo...

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

http://ac.jobdu.com/problem.php?pid=1149   子串计算 #include #include #include #include using namespace...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:2010年计算机联考真题——一维数组循环左移
举报原因:
原因补充:

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