zoukankan      html  css  js  c++  java
  • 编程题目:PAT 1008. 数组元素循环右移问题 (20)

    1008. 数组元素循环右移问题 (20)

    时间限制
    400 ms
    内存限制
    32000 kB
    代码长度限制
    8000 B
    判题程序
    Standard

    一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0A1……AN-1)变换为(AN-M …… AN-1 A0 A1……AN-M-1)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?

    输入格式:每个输入包含一个测试用例,第1行输入N ( 1<=N<=100)、M(M>=0);第2行输入N个整数,之间用空格分隔。

    输出格式:在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。

    输入样例:
    6 2
    1 2 3 4 5 6
    
    输出样例:
    5 6 1 2 3 4
             题目描述如上,N个数字要求循环移位M次,最基本的思路,保存到数组中,重复M次,每次都是取出最后的元素,依次向后平移其他元素,再将取出的元素置于首位即可,这样写成的代码,测试也可以通过。然而考虑到要求以为次数尽可能少,不禁想到了链表,对于链表而言,只需要每次从末尾拿出一个元素,加到头部即可,利用C++ STL的list更是方便至极,以下为参考代码,实现了两种方法。

    /*
    http://pat.zju.edu.cn/contests/pat-b-practise/1008
    */
    #include<iostream>
    #include<vector>
    using namespace std;
    
    int main()
    {
    	int num,shift,temp;
    	cin>>num>>shift;
    	vector<int> v;
    	for(int i=0;i<num;i++)
    	{
    		cin>>temp;
    		v.push_back(temp);
    	}
    	for(int i=0;i<shift;i++)
    	{
    		temp =v[num-1];
    		for(int j=num-1;j>0;j--)
    		{
    			v[j]=v[j-1];
    		}
    		v[0]=temp;
    	}
    	for(int i=0;i<num-1;i++)
    	{
    		cout<<v[i]<<" ";
    	}
    	cout<<v[num-1];
    	system("pause");
    	return 0;
    }


    //////方法二,利用list
    #include<iostream>
    #include<list>
    using namespace std;
    
    void main()
    {
    	int num,shift;//分别表示元素的个数和移位的位数
    	int tmp;
    	list<int> mylist;
    	cin>>num>>shift;
    	while(num--)
    	{
    		cin>>tmp;
    		mylist.push_back(tmp);
    	}
    	while(shift--)
    	{
    		tmp = mylist.back();
    		mylist.pop_back();
    		mylist.push_front(tmp);
    	}
    
    	list<int>::iterator itr = mylist.begin();
    	bool first = true;
    	while(itr!=mylist.end())
    	{
    		if(first)
    		{
    			cout<<*itr++;
    			first = false;
    		}
    		else
    			cout<<" "<<*itr++;
    	}
    	cout<<endl;
    	system("pause");
    }




  • 相关阅读:
    MinGW离线包下载地址
    词法分析器--DFA(c++实现)
    linux下shell统计文件目录下所有代码行数
    四则运算表达式
    BliBli抢楼全攻略
    python 电影下载链接爬虫
    in, out, ref
    联合查询
    SQL语句大全
    LINQ
  • 原文地址:https://www.cnblogs.com/f8master/p/3826095.html
Copyright © 2011-2022 走看看