1. 程式人生 > >UVA 253 Cube painting

UVA 253 Cube painting

spa rcm har scanf src cube fin bre img

題意:輸入字符串代表2個骰子,求出他們是不是相同的骰子(通過旋轉)。

思路:①註意輸入的字符串代表了骰子顏色的分布,如下:

技術分享圖片

同時這也是數顏色的順序(未轉動時),和字符串內容的順序。

②骰子1不動,骰子2不停轉動,分別選0到5做上圖標號為1的位置(6次),然後2到4不停的轉動(即4面轉動,4次),

共24次(最壞)。

③下圖分別為1轉動到位置編號1,和0在位置編號0,骰子水平面向左旋轉90°得到的骰子。

技術分享圖片 技術分享圖片

數一下,分別是1,5,2,3,0,4, 和0,3,1,4,2

分別重復,可以觀察出:1.旋轉6次對應的顏色順序;

2.旋轉其實是,ch=str3[1];str3[1]=str3[2];str3[2]=str3[4];str3[4]=str3[3];str3[3]=ch;


 1 #include "stdio.h"
 2 #include "string.h"
 3 #include "stdlib.h"
 4 #define FIN freopen("input.txt","r",stdin)
 5 #define FOUT     freopen("output.txt","w",stdout)
 6 char c[12],str1[7],str2[7],str3[7];
 7 int roll[7][7] = { {0,1,2,3,4,5},{1,5,2,3,0,4},{2,1,5,0,4,3}, {3,1,0,5,4,2},{4,0,2,3,5,1},{5,4
,2,3,1,0}}; 8 int main() 9 { 10 // FIN; 11 // FOUT; 12 while(scanf("%s",c)!=EOF) 13 { 14 for(int i=0;i<12;i++) 15 { 16 if(i<=5) 17 str1[i]=c[i]; 18 else 19 str2[i-6]=c[i]; 20 } 21 str1[6]=\0; 22 str2[6
]=\0; 23 int flag=0; 24 // printf("1=%s 2=%s\n",str1,str2); 25 for(int i=0;i<6;i++) 26 { 27 for(int j=0;j<6;j++) 28 str3[j]=str2[roll[i][j]]; 29 str1[6]=\0; 30 if(strcmp(str1,str3)==0) 31 { 32 flag=1; 33 break; 34 } 35 for(int j=0;j<3;j++) 36 { 37 char ch=str3[1]; 38 str3[1]=str3[2]; 39 str3[2]=str3[4]; 40 str3[4]=str3[3]; 41 str3[3]=ch; 42 if(strcmp(str1,str3)==0) 43 { 44 flag=1; 45 break; 46 } 47 } 48 if(flag) 49 break; 50 } 51 if(flag) 52 printf("TRUE\n"); 53 else 54 printf("FALSE\n"); 55 } 56 return 0; 57 }



UVA 253 Cube painting