Aizu Online Judge(AOJ)の過去問から、その提出コードの解答例です。
・問題 "Dice II"
https://onlinejudge.u-aizu.ac.jp/problems/ITP1_11_BC
Dice I と同様の方法で、入力された整数の列からサイコロをつくります。
このサイコロを Dice I の方法で回転させた後の上面と前面の整数が質問として与えられるので、右側の面の整数を答えるプログラムを作成してください。
僕が作成、提出したコードは、以下のとおりです。
Aizu Online Judge in C++ #ITP1_11_B : Dice II
/* Aizu Online Judge in C++ #ITP1_11_B : Dice II https://onlinejudge.u-aizu.ac.jp/problems/ITP1_11_B 提出コードの解答例 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]; } }; int main(void){ Dice d; for(int i=0;i<6;i++){ cin>>d.s[i]; } int q; cin>>q; for(int i=0;i<q;i++){ int x,y; cin>>x>>y; if(d.left()==x){ d.roll('E'); } if(d.right()==x){ d.roll('W'); } while(d.up()!=x){ d.roll('N'); } while(d.front()!=y){ d.roll('R'); } cout<<d.right()<<endl; } return 0; }
設問の出典は、プログラミング問題のオンライン採点システム「Aizu Online Judge(AOJ)」です。
http://judge.u-aizu.ac.jp/onlinejudge/