Skip to content

Pat乙级1008 数组元素循环右移问题(简洁到极致的写法) #167

Description

@1982827148
#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<<" ";
	}
}

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions