hdu3328(翻转card) (二)
(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);
}
}
}
| 评论 |
|
|
