当前位置: 代码迷 >> 综合 >> PTA 数组元素循环右移问题 (20分)
  详细解决方案

PTA 数组元素循环右移问题 (20分)

热度:1   发布时间:2024-02-25 14:57:32.0

每个人都有崩溃的时候,就看你的抗压能力到底有多强,如果你的抗压能力强,有办法可以支撑到你能面对并且解决这些困难的话,你就没有问题。                                                                          ----喻言

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

输入格式:

每个输入包含一个测试用例,第1行输入N(1≤N≤100)和M(≥0);第2行输入N个整数,之间用空格分隔。

输出格式:

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

输入样例:

6 2
1 2 3 4 5 6

输出样例:

5 6 1 2 3 4
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <ctime>
#include <cctype>
#include <bitset>
#include <utility>
#include <sstream>
#include <complex>
#include <iomanip>
#include <numeric>
#include<unordered_set>
#include <climits>//INT_maxnn
//#include<bits/stdc++.h>
#define PP pair<ll,int>
#define inf 0x3f3f3f3f
#define INF 0x7fffffff;
#define llinf 0x3f3f3f3f3f3f3f3fll
#define dinf 1000000000000.0
#define PI 3.1415926
#define LL unsigned int
#define wc 1e-8
typedef long long ll;
using namespace std;
int M,N,a[110];
int main()
{scanf("%d%d",&N,&M);for(int i=0;i<N;i++)scanf("%d",&a[i]);M%=N;for(int i=0,j=N-M-1;i<j;i++,j--)swap(a[i],a[j]);for(int i=N-M,j=N-1;i<j;i++,j--)swap(a[i],a[j]);for(int i=0,j=N-1;i<j;i++,j--)swap(a[i],a[j]);for(int i=0;i<N;i++){if(i==N-1)cout<<a[i]<<endl;elsecout<<a[i]<<' ';}return 0;
}

 

  相关解决方案