洛谷--T4563 滚骰子
题目描述
奶牛Bessie有一个放在桌面上的骰子,如图1所示
数字1在上方,数字2在South(南)方位,数字3在East(东)方位,每一对相反方位的数字之和是7,按照上述.数字5在North(北)方位,数字4在west(西)方位,数字6在下方,如图l所示.数字4,5,6在图1中是看不到的。
骰子的初始位置如图1所示.按照下列 6条规则旋转骰子,规则如图2和图3所示:
图2中所示的4条旋转规则是将骰子按照规则指定的方位旋转90度。图3中所示的2
条旋转规则是将骰子沿水平方向分别向left(左)或Right(右)方位旋转90度
图3.旋转规则Left(左)、Right(右)
你需要编写一个程序,从图1所示的方位开始,根据给定的一系列规别连续的旋转骰子.程序要求输出旋转骰子过程中位于上方的数字之和(其中包括图1所示的初始方位上的数字1)。
输入输出格式
输入格式:
第一行输入一个整数n(n≤1000),表示执行旋转的总步数。
第2~n-1行分别输入6条旋转规则中6个方位中的一个
输出格式:
一行输出旋转过程中位于骰子上方的数字之和
输入输出样例
输入样例#1:
5 North North East South West
输出样例#1:
21
输入样例#2:
8 West North Left South Right North Left East
输出样例#2:
34
恶心的模拟
#include<bits/stdc++.h> using namespace std; int ma[100000]; int n,x,ans=1; string s; void swap(int a,int b) { int t=a; a=b; b=t; } int main() { scanf("%d",&n); ma[1]=1; ma[2]=2; ma[3]=3; ma[4]=4; ma[5]=5; ma[6]=6; for(int i=1;i<=n;i++) { cin>>s; if(s[0]=='N') { int t1=ma[5]; ma[5]=ma[6]; ma[6]=t1; int t2=ma[5]; ma[5]=ma[1]; ma[1]=t2; int t3=ma[1]; ma[1]=ma[2]; ma[2]=t3; } else if(s[0]=='S') { int t1=ma[5]; ma[5]=ma[6]; ma[6]=t1; int t2=ma[6]; ma[6]=ma[2]; ma[2]=t2; int t3=ma[2]; ma[2]=ma[1]; ma[1]=t3; } else if(s[0]=='E') { int t1=ma[1]; ma[1]=ma[3]; ma[3]=t1; int t2=ma[1]; ma[1]=ma[4]; ma[4]=t2; int t3=ma[4]; ma[4]=ma[6]; ma[6]=t3; } else if(s[0]=='W') { int t1=ma[1]; ma[1]=ma[4]; ma[4]=t1; int t2=ma[1]; ma[1]=ma[3]; ma[3]=t2; int t3=ma[3]; ma[3]=ma[6]; ma[6]=t3; } else if(s[0]=='R') { int t1=ma[2]; ma[2]=ma[4]; ma[4]=t1; int t2=ma[2]; ma[2]=ma[3]; ma[3]=t2; int t3=ma[3]; ma[3]=ma[5]; ma[5]=t3; } else if(s[0]=='L') { int t1=ma[2]; ma[2]=ma[3]; ma[3]=t1; int t2=ma[2]; ma[2]=ma[4]; ma[4]=t2; int t3=ma[4]; ma[4]=ma[5]; ma[5]=t3; } ans+=ma[1]; } printf("%d",ans); return 0; }