jzoj 1400. 【2012.03.09普及组】骰子

lzusa 发布于 2019-03-23 2 次阅读


 

题目描述

让我们一起来看下,一个放在桌面上的骰子,如图1 所示:

 

   图1 初始方位

数字1在上方,数字2在South(南)方位,数字3在East(东)方位。每一对相反方位的数字之和是7,按照上述规则,数字5在North(北)方位,数字4在West(西)方位, 数字6在下方,如图1 所示,数字4,5,6在图1中是看不到的。

骰子的初始位置如图1所示,按照下列6条规则旋转骰子,规则如图2和图3所示:

 

图2:旋转规则North(北)、 East(东) 、West(西)、 South(南)

 

图2中所示的4条旋转规则是将骰子按照规则指定的方位旋转90度。

图3中所示的2条旋转规则是将骰子沿水平方向分别向Left(左)或Right(右)方位旋转90度。

 

图3:旋转规则Left(左)、Right(右)

你的任务是编写一个程序,从图1所示的方位开始,根据给定的一系列规则连续的旋转骰子,程序要求输出旋转骰子过程中位于上方的数字之和(其中包括图1所示的初始方位上方的数字1)。

 

输入

第一行输入一个整数n(n<=1000),表示执行旋转的总步数。

    第2——n+1行分别输入6条旋转规则中6个方位中的一个

输出

最后一行输出旋转过程中位于骰子上方的数字之和。

异常暴力的模拟,判断输入的每一个数,然后强行按题目的做就可以了
const
  f:array[1..6] of integer=(1,6,3,2,4,5);
var
  a:array[1..6] of integer;
  i,j,k,n,m,s:longint;
  ch:string;
begin
  readln(n);
  s:=1;
  for i:=1 to n do
    begin
      readln(ch);
      if ch='North' then
        begin
          a:=f;
          f[1]:=a[4];
          f[2]:=a[6];
          f[4]:=a[2];
          f[6]:=a[1];
          s:=s+f[1];
        end
      else if ch='East' then
        begin
          a:=f;
          f[1]:=a[5];
          f[3]:=a[1];
          f[2]:=a[3];
          f[5]:=a[2];
          s:=s+f[1];
        end
      else if ch='West' then
        begin
          a:=f;
          f[1]:=a[3];
          f[3]:=a[2];
          f[2]:=a[5];
          f[5]:=a[1];
          s:=s+f[1];
        end
      else if ch='South' then
        begin
          a:=f;
          f[1]:=a[6];
          f[2]:=a[4];
          f[4]:=a[1];
          f[6]:=a[2];
          s:=s+f[1];
        end
      else if ch='Right' then
        begin
          a:=f;
          f[3]:=a[6];
          f[4]:=a[3];
          f[5]:=a[4];
          f[6]:=a[5];
          s:=s+f[1];
        end
      else if ch='Left' then
        begin
          a:=f;
          f[3]:=a[4];
          f[4]:=a[5];
          f[5]:=a[6];
          f[6]:=a[3];
          s:=s+f[1];
        end;
    end;
  writeln(s);
end.

 

 

]]>