Pat乙级1008 数组元素循环右移问题(简洁到极致的写法)
1982827148 opened this issue · comments
#include<iostream>
#include<cmath>
using namespace std;
typedef long long ll;
int main() {
cin>>n>>m;
int a[n];
for(i=0;i<n;i++) cin>>a[i];
for(i=0;i<n;i++){
int j=i-m%n; //通过公式 i->(i+m )%n实现位置的变换,可以逆转换变换后的a[j]=a[i+kn-m] ,
if(j<0) cout<<a[j+n]; //这里的k为使kn-m小于0时的最小值,如果其绝对值大于i只需k+1即可,所以可转换为i-m%n判断正负即可
else cout<<a[j]; //下标之间的逆转换只用一个式子即可表达,就cout<<a[(j>0?j:(j+n))]
if(i<n-1)cout<<" ";
}
}