Aizu Online Judge(AOJ)の過去問から、その提出コードの解答例です。
・問題 "Dice III"
https://onlinejudge.u-aizu.ac.jp/problems/ITP1_11_C
・サイコロ III
僕が作成、提出したコードは、以下のとおりです。
Aizu Online Judge in C++ #ITP1_11_C : Dice III
/* Aizu Online Judge in C++ #ITP1_11_C : Dice III https://onlinejudge.u-aizu.ac.jp/problems/ITP1_11_C 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; struct Dice{ int s[6]; void roll(char c){ int i; if(c=='E'){ i=s[0]; s[0]=s[3]; s[3]=s[5]; s[5]=s[2]; s[2]=i; }else if(c=='W'){ i=s[0]; s[0]=s[2]; s[2]=s[5]; s[5]=s[3]; s[3]=i; }else if(c=='N'){ i=s[0]; s[0]=s[1]; s[1]=s[5]; s[5]=s[4]; s[4]=i; }else if(c=='S'){ i=s[0]; s[0]=s[4]; s[4]=s[5]; s[5]=s[1]; s[1]=i; }else{ i=s[1]; s[1]=s[2]; s[2]=s[4]; s[4]=s[3]; s[3]=i; } } int up(void){ return s[0]; } int left(void){ return s[3]; } int right(void){ return s[2]; } int front(void){ return s[1]; } }; bool same(Dice a,Dice b){ for(int i=0;i<6;i++){ if(a.s[i]!=b.s[i]){ return false; } } return true; } int main(void){ Dice d[2]; for(int j=0;j<2;j++){ for(int i=0;i<6;i++){ cin>>d[j].s[i]; } } bool tf=false; for(int i=0;i<4;i++){ d[1].roll('R'); for(int j=0;j<4;j++){ d[1].roll('N'); if(same(d[0],d[1])){ tf=true; } } } d[1].roll('E'); for(int j=0;j<4;j++){ d[1].roll('N'); if(same(d[0],d[1])){ tf=true; } } d[1].roll('W'); d[1].roll('W'); for(int j=0;j<4;j++){ d[1].roll('N'); if(same(d[0],d[1])){ tf=true; } } cout<<(tf ? "Yes" : "No")<<endl; return 0; }
設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/