程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> hdu - 4452 - Running Rabbits

hdu - 4452 - Running Rabbits

編輯:C++入門知識

題意:一個N*N的正方形田野分成1*1的格子,有兩只兔子,Tom在左上角(1, 1),Jerry在右下角(N, N),它們可以沿東南西北4個方向走,但不可出格,各有各的速度,相遇時,兩只兔子交換移動方向,碰邊界時反向,各自還有自己的轉左周期,周期一到即轉左(但此時兩只兔子相遇就不執行此周期轉左),問K小時後兩只兔子的坐標。 ——>>照著走就是了。 邊界處理:若N = 5, 右或下出界: x(或y)直接取模2*N-2 1234543212345432123……周期為2*5-2,存入數組a; 左或上出界: x(或y) 變成1 - x(或1 - y)再取模2*N-2 ……123454321234543212345周期為2*5-2,存入數組b; 開始沒注意到speed( 1≤s<N),以為會來回改變方向多次,寫多寫錯……其實挺水,這題…… [cpp]  #include <cstdio>   #include <algorithm>      using namespace std;      int N, a[50], b[50];      void turn(char& c)      //轉左   {       switch(c)       {           case 'E': c = 'N'; break;           case 'S': c = 'E'; break;           case 'W': c = 'S'; break;           case 'N': c = 'W'; break;       }   }   void moveto(char& c, int s, int& x, int& y)     //移步   {       switch(c)       {           case 'E':               {                   y += s;                   if(y > N)                   {                       y = a[y%(2*N-2)];                       c = 'W';                   }                   break;               }           case 'S':               {                   x += s;                   if(x > N)                   {                       x = a[x%(2*N-2)];                       c = 'N';                   }                   break;               }           case 'W':               {                   y -= s;                   if(y < 1)                   {                       y = b[(1-y)%(2*N-2)];                       c = 'E';                   }                   break;               }           case 'N':               {                   x -= s;                   if(x < 1)                   {                       x = b[(1-x)%(2*N-2)];                       c = 'S';                   }                   break;               }       }   }   int main()   {       int K, T_s, T_t, J_s, J_t, i;       char T_c, J_c;       while(~scanf("%d", &N))       {           if(!N) return 0;           scanf("\n%c%d%d", &T_c, &T_s, &T_t);           scanf("\n%c%d%d", &J_c, &J_s, &J_t);           scanf("%d", &K);           int T_x = 1, T_y = 1, J_x = N, J_y = N;           a[0] = 2;           for(i = 1; i <= N; i++) a[i] = i;           for(i = N+1; i <= 2*N-3; i++) a[i] = 2*N-i;           b[0] = 1;           for(i = 1; i <= N-1; i++) b[i] = i+1;           for(i = N; i <= 2*N-3; i++) b[i] = 2*N-i-1;           for(i = 1; i <= K; i++)           {               moveto(T_c, T_s, T_x, T_y);               moveto(J_c, J_s, J_x, J_y);               if(T_x == J_x && T_y == J_y) swap(T_c, J_c);               else               {                   if(i % T_t == 0) turn(T_c);                   if(i % J_t == 0) turn(J_c);               }           }           printf("%d %d\n", T_x, T_y);           printf("%d %d\n", J_x, J_y);       }       return 0;   }  

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved