问题描述:
编写程序,将一维数组中的元素向右循环移动N次。
请定义函数,使得数组的元素能向右循环移动1位:最右边的元素移到最左边,其余元素往右移1位。
输入说明:
第一行整数n,表示数组大小为n
第二行,n个数,表示数组中的n个元素。
第三行,整数N,表示数组向右移动N次。
输出说明:
移动后的数组元素,每两个元素之间以一个空格分隔。行首与行尾无多余空格。
解决方法:①按部就班 定义函数 挨个移动元素
代码如下:
#include <cstdio>
#include <cmath>
#include<iostream>
using namespace std;
void move(int n,int arr[]);
int main()
{
int arr[10000];
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>arr[i];
}
int N;
cin>>N;
for(int i=1;i<=N;i++)
{
move(n,arr);
}
for(int i=0;i<n;i++)
{
if(i!=n-1)
printf("%d ",arr[i]);
else
printf("%d",arr[i]);
}
return 0;
}
void move(int n,int arr[])
{
int tmp =arr[n-1];
for(int i=n-1;i>0;i--)
{
arr[i]=arr[i-1];
}
arr[0]=tmp;
}
方法②:投机取巧 改变输出 printf出移动后的数组 但数组本质并没有移动
#include <cstdio>
#include <cmath>
#include<iostream>
using namespace std;
int main()
{
int arr[10000];
int n;
cin>>n;
for(int i=0;i<n;i++)
{
cin>>arr[i];
}
int m;
cin>>m;
m=m%n;//确保m小于n 防止数组越界
for(int i=0;i<n;i++)
{
printf("%d",arr[(n-m+i)%n]);
if(i<n-1)
cout<<" ";
}
return 0;
}