發表於 C++CPE考古題UVA一顆星

【CPE】UVA 10409 Die Game 一星必考題 by C++

10409 Die Game

簡易翻譯和條件:

桌面上有一骰子,接下來輸入一連串的指令將骰子翻面,接著輸出最後朝上的那面點數。

這次刺激了,我相信剛拿到題目的初學者們一定很傻眼吧!
接著開始想一大堆新奇的演算法

但是!!其實這題超級無腦
其實這題只要想辦法把找到翻面的規則就好了

這題我只用了一個長度為6的陣列
這六格 int 的陣列就代表著上下東南西北的點數

接著仔細觀察假如往北轉的話
是不是東西兩面都不會動到點數呢?
所以就上北下南這四面依序交換就可以了
同理

照著底下這些規則依序交換陣列中的點數就可以了~

  • 往北轉: 上北下南
  • 往西轉: 上西下東
  • 往南轉: 上北下南
  • 往東轉: 上西下東

如果有任何問題或是你有更好的寫法歡迎再下面留言討論喔!
我們下一題見啦!

程式碼:

#include 
#include 
using namespace std;

void toEast(int* arr){
    int t = arr[0];
    arr[0] = arr[3];
    arr[3] = arr[1];
    arr[1] = arr[5];
    arr[5] = t;
}

void toWest(int* arr){
    int t = arr[0];
    arr[0] = arr[5];
    arr[5] = arr[1];
    arr[1] = arr[3];
    arr[3] = t;
}

void toNorth(int* arr){
    int t = arr[0];
    arr[0] = arr[4];
    arr[4] = arr[1];
    arr[1] = arr[2];
    arr[2] = t;
}

void toSouth(int* arr){
    int t = arr[0];
    arr[0] = arr[2];
    arr[2] = arr[1];
    arr[1] = arr[4];
    arr[4] = t;
}


int main(){


    int times;
    while(cin >> times && times!=0){
        
        // init 上下北西南東
        int faces[6] = {1, 6, 2, 3, 5, 4};

        while(times--){
            string a = "";
            cin >> a;
            if(a=="north"){
                toNorth(faces);
            }
            if(a=="south"){
                toSouth(faces);
            }
            if(a=="west"){
                toWest(faces);
            }
            if(a=="east"){
                toEast(faces);
            }

        }

        cout << faces[0] << endl;
    }

    return 0;
}
UVA 10409 CPE Die Game
UVA 10409 CPE Die Game

作者:

一位 熱愛資工領域、喜歡好笑事物、偶爾打打網球 的學生 ! For A Better Me!

發表迴響

Please log in using one of these methods to post your comment:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Google photo

您的留言將使用 Google 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.