题目1477:怪异的洗牌
/*********************************
* 日期:2013-2-26
* 作者:SJF0115
* 题号: 九度OJ 题目1477:怪异的洗牌
* 来源:http://ac.jobdu.com/problem.php?pid=1477
* 结果:AC
* 来源:2010年吉林大学计算机研究生机试真题
* 总结:
**********************************/
#include <stdio.h>
#include <stdlib.h>
int card[1001];
int array[1001];
int main () {
int n,N,i,j,x,temp;
while (scanf("%d%d",&n,&N) != EOF && n != 0) {
//n张牌
for(i = 1;i <= n;i ++){
card[i] = i;
}
while (N--) {
scanf("%d",&x);
//shift操作
//把x后半部分放到array数组中暂存
for(i = x + 1;i <= n;i ++){
array[i - x] = card[i];
}
//把x前半部分移动后面
for(i = x;i >= 1;i--){
card[n-x+i] = card[i];
}
//把暂存的后半部分放到前面
for(i = 1;i <= n-x;i++){
card[i] = array[i];
}
//flip操作
for(i = 1,j = n / 2;i < j;i ++,j --){
temp = card[i];
card[i] = card[j];
card[j] = temp;
}
}
//输出
for(i = 1;i <= n;i++){
printf("%d ",card[i]);
}
printf("\n");
}
return 0;
}