uva253Cube painting骰子塗色

背景:這題我寫出來發生了一個奇怪的現象,就是同樣的代碼,在vc6.0裏面運行的好好的,但在codebloke裏面卻死活不對,最後費了我九牛二虎之力,我終於找到了,原來數組開小了,o(︶︿︶)o 唉。

思路:分別用兩個數組模擬兩個骰子,定義三個旋轉函數,分別繞着xyz三個方向旋轉,然後定義一個判斷函數,在判斷函數中用三個for循環,在循環中對骰子2進行旋轉,旋轉後與骰子1比較,看是否相同,判斷是否相同可以直接用strcmp()函數。

學習:自頂向下程序設計方法,就是先寫出程序框架,然後再去完善各個函數。

#include <stdio.h>
#include <string.h>
char dice1[8],dice2[8];
void change1(void)
{
    char ch;
    ch=dice2[0];
    dice2[0]=dice2[2];
    dice2[2]=dice2[5];
    dice2[5]=dice2[3];
    dice2[3]=ch;
}
void change2(void)
{
    char ch;
    ch=dice2[0];
    dice2[0]=dice2[1];
    dice2[1]=dice2[5];
    dice2[5]=dice2[4];
    dice2[4]=ch;
}
void change3(void)
{
    char ch;
    ch=dice2[1];
    dice2[1]=dice2[3];
    dice2[3]=dice2[4];
    dice2[4]=dice2[2];
    dice2[2]=ch;
}
int judge(void)
{
    for(int i=0;i<4;i++)
    {
        change1();
        for(int j=0;j<4;j++)
        {
            change2();
            for(int k=0;k<4;k++)
            {
                change3();
                if(strcmp(dice1,dice2)==0) return 1;
            }
        }
    }
    return 0;
}
int main(void)
{
    while(scanf("%c",&dice1[0])==1)
    {
        for(int i=1;i<6;i++)
            scanf("%c",&dice1[i]);
        for(int j=0;j<6;j++)
            scanf("%c",&dice2[j]);
        dice1[6]='\0';
        dice2[6]='\0';
        puts(judge()?"TRUE":"FALSE");
        getchar();
    }
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章