hdu3328(翻转card) (二)

2014-11-23 21:54:17 来源: 作者: 浏览: 16
(scanf("%d",&n)>0&&n) { getchar(); for(i=1;i<=n;i++)//首先每个栈中只有一张card { scanf("%c",&stack[i][1].dir); stack[i][1].data=i; top[i]=1; } getchar(); scanf("%s",turn);//输入要执行的步骤 scanf("%d",&m); for(i=1;i<=m;i++)//输入要在最后一堆中查找的位置 scanf("%d",&a[i]); had=1;end=n;//初始指的位置 Turn(turn,n-1);//执行 printf("Pile %d\n",t++); for(i=1;i<=m;i++) { k=top[end]-a[i]+1; if(stack[end][k].dir=='U') printf("Card %d is a face up %d.\n",a[i],stack[end][k].data); else printf("Card %d is a face down %d.\n",a[i],stack[end][k].data); } } } #include struct card { int data; char dir;//面向上或下 }; struct card stack[105][105]; int had,end,top[105]; void Turn(char turn[],int n) { int i=0,tp; while(i0)//按顺序从上到下把全部的放入下一个栈里 { if(stack[end][tp].dir=='U') stack[end][tp].dir='D'; else stack[end][tp].dir='U'; stack[end-1][++top[end-1]]=stack[end][tp]; tp--; } top[end]=0; end--;//end是指向最右边的一个栈 } else { tp=top[had]; while(tp>0) { if(stack[had][tp].dir=='U') stack[had][tp].dir='D'; else stack[had][tp].dir='U'; stack[had+1][++top[had+1]]=stack[had][tp]; tp--; } top[had]=0; had++;//had是指向最左边的一个栈 } i++;//执行下一步 } } int main() { int n,i,m,a[105],t=1,k; char turn[105]; while(scanf("%d",&n)>0&&n) { getchar(); for(i=1;i<=n;i++)//首先每个栈中只有一张card { scanf("%c",&stack[i][1].dir); stack[i][1].data=i; top[i]=1; } getchar(); scanf("%s",turn);//输入要执行的步骤 scanf("%d",&m); for(i=1;i<=m;i++)//输入要在最后一堆中查找的位置 scanf("%d",&a[i]); had=1;end=n;//初始指的位置 Turn(turn,n-1);//执行 printf("Pile %d\n",t++); for(i=1;i<=m;i++) { k=top[end]-a[i]+1; if(stack[end][k].dir=='U') printf("Card %d is a face up %d.\n",a[i],stack[end][k].data); else printf("Card %d is a face down %d.\n",a[i],stack[end][k].data); } } }

-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: