UVA 101 The Blocks Problem

    UVA 101 The Blocks Problem              题目链接

题目大意:

     给出数字n,表示有n个方块,每次按照操作步骤移动方块,根据不同的指令,执行不同的操作。

            1.move a onto b,把a和b上面的方块都放回原来位置,然后把a放到b上面;

            2.move a over b,把a上面的放回原处,然后把a放在b所在的方块堆的上面;

            3.pile a onto b,把b上面的放回原来位置,然后把a和a上面的方块整体放到b上面;

            4.pile a over b,把a和a上面的方块整体放到b所在堆的上面。

         比较有意思的是,当a和b在同一堆上时间,不需要进行操作,为此我wa了三次。


解题思路:

      根据四种情况进行模拟,本人运用的是结构体加数组的方法。题还不是太难,主要是读懂题意,比较绕,然后是要找到那个坑。


代码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct stu{
 int a[50];
 int x;
}st; 
int main()
{
int i,j,k,m,n,x,y,x0,y0,x2,y2;
st s[50];
char s1[10],s2[10];
while(scanf("%d",&n)!=EOF)
{
for(i=0;i<n;i++)
{
s[i].x=0;
s[i].a[s[i].x++]=i;
}
while(scanf("%s",s1),strcmp(s1,"quit"))
{
scanf("%d%s%d",&x,s2,&y);
   for(i=0;i<n;i++)
{
for(j=0;j<s[i].x;j++)
{
if(x==s[i].a[j])
  x0=i,y0=j;
if(y==s[i].a[j])
   x2=i,y2=j;
 }
 }
if(x0==x2)
 continue;
if(!strcmp(s1,"move")&&!strcmp(s2,"onto"))
{
for(i=y0+1;i<s[x0].x;i++)
{
s[s[x0].a[i]].a[s[s[x0].a[i]].x++]=s[x0].a[i];
}
s[x0].x=y0;
for(i=y2+1;i<s[x2].x;i++)
{
s[s[x2].a[i]].a[s[s[x2].a[i]].x++]=s[x2].a[i];
}
s[x2].a[y2+1]=x;
s[x2].x=y2+2;
}
else if(!strcmp(s1,"move")&&!strcmp(s2,"over"))
{
for(i=y0+1;i<s[x0].x;i++)
{
s[s[x0].a[i]].a[s[s[x0].a[i]].x++]=s[x0].a[i];
}
s[x0].x=y0;
s[x2].a[s[x2].x++]=x;
}
else if(!strcmp(s1,"pile")&&!strcmp(s2,"onto"))
{
for(i=y2+1;i<s[x2].x;i++)
{
s[s[x2].a[i]].a[s[s[x2].a[i]].x++]=s[x2].a[i];
}
s[x2].x=y2+1;
for(i=y0;i<s[x0].x;i++)
{
s[x2].a[s[x2].x++]=s[x0].a[i];
 }
 s[x0].x=y0;
}
else if(!strcmp(s1,"pile")&&!strcmp(s2,"over"))
{
for(i=y0;i<s[x0].x;i++)
{
s[x2].a[s[x2].x++]=s[x0].a[i];
 }
s[x0].x=y0; 
}
}
    for(i=0;i<n;i++)
     {
    printf("%d:",i);
    for(j=0;j<s[i].x;j++)
    {
    printf(" %d",s[i].a[j]);
}
printf("\n");
 }
}
return 0;
}

    

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值