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

Posted bigageyuan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1008 数组元素循环右移问题 (20分)相关的知识,希望对你有一定的参考价值。

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

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

输入格式:

每个输入包含一个测试用例,第1行输入NNN(1≤N≤1001le N le 1001N100)和MMM(≥0ge 00);第2行输入NNN个整数,之间用空格分隔。

输出格式:

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

输入样例:

6 2
1 2 3 4 5 6
 

输出样例:

5 6 1 2 3 4


#include<stdio.h>
void reverse(int a[],int n)
{
 int i;
 int temp;
 for(i=0;i<n/2;i++)
 {
  temp=a[i];
  a[i]=a[n-i-1];
  a[n-i-1]=temp;
  
 }
 
}
int main()
{
 int n,m;
 int i; 
 scanf("%d %d",&n,&m);
 int a[n];
 for(i=0;i<n;i++)
 {
  scanf("%d",&(a[i]));
 }
 m=m%n;
 reverse(a+n-m,m);
 reverse(a,n-m);
 reverse(a,n);
 for(i=0;i<n;i++)
 {
 
  if(i!=n-1)
  printf("%d ",a[i]);
  else
  printf("%d ",a[i]);
 }
 
 return 0;
}
 








































以上是关于1008 数组元素循环右移问题 (20分)的主要内容,如果未能解决你的问题,请参考以下文章

PAT乙级 1008 数组元素循环右移问题 (20 分)

JAVA1008 数组元素循环右移问题 (20分) PAT乙级 PAT (Basic Level) Practice (中文)

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

PAT乙级1008 数组元素循环右移问题 (20 分)

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

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