輕院1070 小汽車的位置

2021-08-07 23:50:19 字數 1337 閱讀 1953

有一輛智慧型小車,最初(時間為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,含義如上所述。

輸出佔一行,包含兩個整數,表示小車的最終位置。兩個整數之間由空格隔開。

51 10 2 15 3

-50 100

此題資訊量大,考查內容較為綜合。

(1)數位化。可為四個方向編號,自向北開始,逆時針將4個方向依次編號為0,1,2,3。當接到向左轉命令,方向號增1,向右轉則方向號減1。為避免出現負數或大於3的情況,可對4取模。

正確**:

#include

int main(void)

, j = 1, c, a[500] = ;

while(scanf("%d%d", &t[j], &c))

a[i] += (t[j]-t[j-1]) * 10;

}else

a[i] += (t[j]- t[j-1])* 10;

}j ++;

if(c ==1)

else if(c == 2)

else

}printf("%d %d\n", a[3]-a[1], a[0]-a[2]);

return 0;}

解題思路:

1:用i來表示方向,北,西,南,東分別用0,1,2,3來表示

2:每次向左轉i加1,向右轉i減1.

3:方向的大小用乙個陣列來表示

4:輸入時間用乙個陣列來表示,初始時間置為零

6:為避免數字越界或為負數,可以對4取餘

錯誤原因:

1:因為使用陣列記錄時間,所以陣列下標每次要遞增,剛開始忘記遞增了。

2:i減1後若為負數應先迴圈加4,確保i為正數後再對4取餘。

經驗總結:

1:若累減出現負數,可以考慮累加。

2:遇到有x軸y軸座標的題,可以用4個陣列來作為方向,記錄其行駛的長度,然後x軸的兩個陣列分別相減;y軸的兩個陣列方別相減。即可求出其座標。

ZZULIOJ 1070 小汽車的位置

有一輛智慧型小車,最初 時間為0 的位置為 0,0 我們想知道它最後的位置。小車以每小時10公里的速度向北移動 以北為y軸正向,以東為x軸正向 小車會受到一系列依照時間戳記排序的命令,1表示 向左轉 2表示 向右轉 3表 停止 每個命令的前面有乙個時間戳記,所以我們知道該命令是何時發出的。最後乙個命...

ZZULIOJ 1070 小汽車的位置

題目描述 有一輛智慧型小車,最初 時間為0 的位置為 0,0 我們想知道它最後的位置。小車以每小時10公里的速度向北移動 以北為y軸正向,以東為x軸正向 小車會受到一系列依照時間戳記排序的命令,1表示 向左轉 2表示 向右轉 3表 停止 每個命令的前面有乙個時間戳記,所以我們知道該命令是何時發出的。...

HAUTOJ 1070 小汽車的位置

題目描述 有一輛智慧型小車,最初 時間為0 的位置為 0,0 我們想知道它最後的位置。小車以每小時10公里的速度向北移動 以北為y軸正向,以東為x軸正向 小車會受到一系列依照時間戳記排序的命令,1表示 向左轉 2表示 向右轉 3表 停止 每個命令的前面有乙個時間戳記,所以我們知道該命令是何時發出的。...