機器人行走

機器人行走
/*
某少年宮引進了一批機器人小車。可以接受預先輸入的指令,按指令行動。小車的基本動作很簡單,只有3種:左轉(記爲L),右轉(記爲R),向前走若干釐米(直接記數字)。
    例如,我們可以對小車輸入如下的指令:
    15L10R5LRR10R20
    則,小車先直行15釐米,左轉,再走10釐米,再右轉,...
    不難看出,對於此指令串,小車又回到了出發地。
   你的任務是:編寫程序,由用戶輸入指令,程序輸出每條指令執行後小車位置與指令執行前小車位置的直線距離。
【輸入、輸出格式要求】
    用戶先輸入一個整數n(n<100),表示接下來將有n條指令。
   接下來輸入n條指令。每條指令只由L、R和數字組成(數字是0~100之間的整數)
    每條指令的長度不超過256個字符。
    程序則輸出n行結果。
    每條結果表示小車執行相應的指令前後位置的直線距離。要求四捨五入到小數後2位。
*/
#include
#include 
using namespace std;
#define N 100   //最多的指令數
#define M 256   //每條指令的字符最多總數
void main()
{
 int num;
 double m=0.00;
 char a[N][M];
 int count[M],q=0,t=0;
 cin>>num;//輸入指令條數
 //輸入每條指令
 for(int x=0;x<num;x++)
 {
  cin>>a[x];
 }
 //初始化計數器和運算
 for(int y=0;y<num;y++)
 {
  count[y]=0;
  for(int s=0;s<M-1;s++)
  {
   if(a[y][s]!='\0')
    count[y]=count[y]+1;
   else
    break;
  }
 }
//運算距離
 for(int i=0;i<num;i++)
 { 
  //初始化方向
 double b[6][2];
 b[0][0]=0.00;b[0][1]=1.00;//上
 b[1][0]=1.00;b[1][1]=0.00;//右
 b[2][0]=0.00;b[2][1]=-1.00;//下
 b[3][0]=-1.00;b[3][1]=0.00;//左
 b[4][0]=0.00;b[4][1]=0.00;//中間轉換暫存
 b[5][0]=0.00;b[5][1]=0.00;//最終座標存儲
 //運算終結點座標
  for(int j=0;j<count[i]+1;j++)
  {
   if(a[i][j]=='R'||a[i][j]=='L'||a[i][j]=='\0')
   {
    if(a[i][j-1]>='0'&&a[i][j-1]<='9')
    {
     m=(int)a[i][j-1]-48;
     if(a[i][j-2]>='0'&&a[i][j-2]<='9')
     {
      m+=((int)a[i][j-2]-48)*10;
      if(a[i][j-3]>'0'&&a[i][j-3]<='9')
      {
       m+=((int)a[i][j-3]-48)*100;
      }
     }
     b[5][0]+=b[0][0]*m;
     b[5][1]+=b[0][1]*m;
    }
   }
  //轉換方向
   if(a[i][j]=='R')
   {
    b[4][0]=b[0][0];b[4][1]=b[0][1];
    b[0][0]=b[1][0];b[0][1]=b[1][1];
    b[1][0]=b[2][0];b[1][1]=b[2][1];
    b[2][0]=b[3][0];b[2][1]=b[3][1];
    b[3][0]=b[4][0];b[3][1]=b[4][1];
    b[4][0]=0;b[4][1]=0;
   }
   if(a[i][j]=='L')
   {
    b[4][0]=b[0][0];b[4][1]=b[0][1];
    b[0][0]=b[3][0];b[0][1]=b[3][1];
    b[3][0]=b[2][0];b[3][1]=b[2][1];
    b[2][0]=b[1][0];b[2][1]=b[1][1];
    b[1][0]=b[4][0];b[1][1]=b[4][1];
    b[4][0]=0;b[4][1]=0;
   }
  }
  printf("%.2f",sqrt(b[5][0]*b[5][0]+b[5][1]*b[5][1]));
 }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章