liuchuo / PAT

🍭 浙江大学PAT题解(C/C++/Java/Python) - 努力成为萌萌的程序媛~

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

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<<" ";
	}
}