zoj1056 The Worm Turns

  1. //zoj1056 The Worm Turns
  2. //Accepted 1056 C ++ 00:00.00 388K
  3. #include <stdio.h>
  4. struct worm{ int x,y;}w[20];
  5. int n;
  6. void init()
  7. {
  8.        for (int i=0; i<20; ++i){
  9.               w[i].x = 25;
  10.               w[i].y = 30-i;
  11.        }
  12. }
  13. void move(int x,int y)
  14. {
  15.        for (int i=19; i>0; --i){
  16.               w[i].x = w[i-1].x;
  17.               w[i].y = w[i-1].y;
  18.        }
  19.        w[0].x = x;
  20.        w[0].y = y;
  21. }
  22. int judge()
  23. {
  24.        if (w[0].x<1 || w[0].x>50 || w[0].y<1 || w[0].y>50) return 2;
  25.        for (int i=1; i<20; ++i)
  26.               if (w[i].x==w[0].x && w[i].y==w[0].y)
  27.                      return 1;
  28.        return 0;
  29. }
  30. void solve()
  31. {
  32.        char s[101];
  33.        scanf ("%s",s);
  34.        init();
  35.        for (int i=0; i<n; ++i){
  36.               if (s[i]=='E') move(w[0].x,w[0].y+1);
  37.               if (s[i]=='W') move(w[0].x,w[0].y-1);
  38.               if (s[i]=='N') move(w[0].x-1,w[0].y);
  39.               if (s[i]=='S') move(w[0].x+1,w[0].y);
  40.               int j = judge();
  41.               if (j==1) {
  42.                      printf ("The worm ran into itself on move %d./n",i+1);
  43.                      return ;
  44.               }
  45.               if (j==2) {
  46.                      printf ("The worm ran off the board on move %d./n",i+1);
  47.                      return ;
  48.               }
  49.        }
  50.        printf ("The worm successfully made all %d moves./n",n);
  51. }
  52. int main()
  53. {
  54. #ifdef ONLINE_JUDGE
  55. #else
  56.        freopen("1056.txt","r",stdin);
  57. #endif
  58.        while (scanf("%d",&n)!=EOF && n)
  59.               solve();
  60. #ifdef ONLINE_JUDGE
  61. #else
  62.        fclose(stdin);
  63. #endif
  64.        return 0;
  65. }  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值