题解 | #怪异的洗牌#

怪异的洗牌

https://www.nowcoder.com/practice/1801ea11cc9d4732a7f0cb2b0b75c8cf

#include <bits/stdc++.h>
#define MAX 1000
using namespace std;

int main(){
	int data[MAX],res[MAX],n,k,index,i,len;
	while(cin>>n>>k){
		if(n == 0 && k == 0)
			return 0;
		for(i = 0; i < n; i++)
			data[i] = i+1;
		while(k--){
			cin>>index;
			for(i = 0; i < n; i++)	//shift
				res[(i-index+n) % n] = data[i];
	//		for(i = 0; i < n; i++)
	//			cout<<res[i]<<" ";
			
			if(n % 2 == 0){//偶数 
				len = n / 2; 
				for(i = 0; i < len / 2; i++)	//flip
					swap(res[i],res[len-1-i]);
			}else{
				len = (n-1) / 2;
				for(i = 0; i < (len+1) / 2; i++)	//flip
					swap(res[i],res[len-1-i]);
				
			}
			for(int j = 0; j < n; j++)		//为下次操作准备
				data[j] = res[j];
			
		}
		for(int i = 0; i < n ;i++)
			cout<<res[i]<<" ";
		cout<<endl;
	}
	


}

全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务