回到 CPE 必考一顆星 49 題選集
UVa 10409 - Die Game
( Tip: 點擊左上方的三橫槓選單按鈕,可以收起左側 Pdf 頁。)
Step 1. 題目概要
- 桌上有一顆骰子,並在一開始保持初始狀態:頂面為1點,北面為2點,西面為3點。
- 解出另外三個面的規則為:任何一對相對的面的數字總和始終為7。
- 您的程式應接受一系列指令,指令為東"east",南"south",西"west",北"north"。
- 例如"north"指令將骰子向下滾動到北,即頂面變為新的北,北變為新的底,依此類推。
- 執行完所有指令後,程式應顯示最終位於頂面的數字。
Step 2. 解題思路
- 根據規則,我們可以看出初始的各面對應點數分別為:上1,下6,北2,南5,西3,東4
- 模擬滾動的結果後,我們可以看出規律:
- 向北轉,東西面不會動到;只要把底、北、頂、南面兩兩交換一輪即可
- 向南轉,東西面不會動到;只要把底、南、頂、北面兩兩交換一輪即可
- 向西轉,南北面不會動到;只要把底、西、頂、東面兩兩交換一輪即可
- 向東轉,南北面不會動到;只要把底、東、頂、西面兩兩交換一輪即可
1 2 3 4 5 6 7
| 1 north 3 north east south 0
|
Step 4. 參考程式碼 - Accepted Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| #include <bits/stdc++.h> using namespace std;
int main() { ios::sync_with_stdio(0); cin.tie(0);
int n; string cmd; while(cin>>n) { int top=1,bottom=6; int north=2,south=5; int west=3,east=4; if(n==0) break; for(int i=0;i<n;i++) { cin>>cmd; if(cmd=="north") { swap(bottom,north); swap(north,top); swap(top,south); } else if(cmd=="south") { swap(bottom,south); swap(south,top); swap(top,north); } else if(cmd=="west") { swap(bottom,west); swap(west,top); swap(top,east); } else if(cmd=="east") { swap(bottom,east); swap(east,top); swap(top,west); } } cout<<top<<"\n"; } return 0; }
|
回到 CPE 必考一顆星 49 題選集