ZZULIOJ 1070:小汽车的位置
小汽車的位置
題目描述
有一輛智能小車,最初(時間為0)的位置為(0,0),我們想知道它最后的位置。小車以每小時10公里的速度向北移動(以北為y軸正向,以東為x軸正向)。小車會受到一系列依照時間戳記排序的命令,1表示“向左轉”,2表示“向右轉”,3表“停止”。每個命令的前面有一個時間戳記,所以我們知道該命令是何時發出的。最后一個命令一定是“停止”。我們另外假設,這輛小車非常靈活,它可以在瞬間轉彎。
以下列輸入為例。小車在時間為5的時候收到一個“向左轉”的命令1,在時間10收到一個“向右轉”的命令2,在時間15收到一個“停止”的命令3。那么在最后時間15的時候,小車的位置將在(-50,100)。程序只要求輸出小車最后的位置,第一個整數是x坐標,第二個整數是y坐標。
輸入
輸入包含多個命令,每個命令由整數time和command組成,表示在時刻time發出命令command。command的取值范圍1-3,含義如上所述。
輸出
輸出占一行,包含兩個整數,表示小車的最終位置。兩個整數之間由空格隔開。
樣例輸入 Copy
5
1
10
2
15
3
樣例輸出 Copy
-50 100
提示
此題信息量大,考查內容較為綜合。
(1)數字化。可為四個方向編號,自向北開始,逆時針將4個方向依次編號為0,1,2,3。當接到向左轉命令,方向號增1,向右轉則方向號減1。為避免出現負數或大于3的情況,可對4取模
#include<stdio.h> int main() {int x=0,y=0;//表示再原點 int time,command;int a=0,b=0;while(scanf("%d%d",&time,&command)){switch(a){ //逆時針方向y軸正方向0,x軸負方向為1,y軸負方向為2,x軸正方向為3, case 0: y+=(time-b)*10; break;case 1: x-=(time-b)*10; break;case 2: y-=(time-b)*10; break;case 3: x+=(time-b)*10; break;//求沿著各軸所移動的距離 }if(command==3)//命令3為停止,跳出循環 break;else if(command==1)//方向向左 方向號加1 a++;else if(command==2)//方向向右 方向號減1 a--;a=(a+4)%4;//避免出現負數或大于3的情況,可對4取模。b=time;}printf("%d %d\n",x,y);return 0; }
總結
以上是生活随笔為你收集整理的ZZULIOJ 1070:小汽车的位置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ZZULIOJ 1060:逆序数字
- 下一篇: oracle过滤数据,过滤数据 (Ora