题目
代码
#include <iostream>
using namespace std;
int main()
{
int n, m, i, j;
float N=n/2;
i = 0;
j = 0;
cin >> n;
cin >> m;
if(m>n)//存在m>n的情况
{
m=m%n;
}
int a[n];
if(n==m)
{
int b=n;
while(b>0)
{
cin>>a[b-1];
b--;
}
}
else if(m==0)
{
while(i<n)
{
cin>>a[i];
i++;
}
}
else if (m < N)
{
while (i + m < n)
{
cin >> a[i + m];
i++;
}
while (j < m)
{
cin >> a[j];
j++;
}
}
else if (m>N)
{
while(i<n-m)
{
cin>>a[i+m];
i++;
}
while(j<m)
{
cin>>a[j];
j++;
}
}
i = 0;
while (i < n-1)
{
cout << a[i] << " ";
i++;
}
cout<<a[i];//最后不能有空格
//system("pause");
}
备注
这是一个较为偷懒的算法,在输入时就构成数组,未进行换位排序。正常来说需要改变a数组长度再进行复制,m<n/2时将后半复制到前面,m>n/2是将前半复制到后面。此代码可以再精简一番,不需要判断m与n/2大小关系。