当前位置: 代码迷 >> 综合 >> 【2012.03.09普及组】骰子 (Standard IO)
  详细解决方案

【2012.03.09普及组】骰子 (Standard IO)

热度:102   发布时间:2023-10-09 12:26:50.0
让我们一起来看下,一个放在桌面上的骰子,如图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)。

题解:

模拟。

代码:
var
  a:array[1..6]of longint=(1,6,2,3,5,4);
  n:longint;
procedure jh(x,y:longint);
var
  z:longint;
begin
  z:=a[x];a[x]:=a[y];a[y]:=z;
end;
procedure init;
var
  i,ans:longint;
  s:string;
begin
  readln(n);ans:=a[1];
  for i:=1 to n do
    begin
      readln(s);
      if s='North' then
        begin
          jh(1,3);
          jh(2,5);
          jh(3,5);
        end;
      if s='East' then
        begin
          jh(1,6);
          jh(2,4);
          jh(4,6);
        end;
      if s='West' then
        begin
          jh(1,4);
          jh(2,6);
          jh(4,6);
        end;
      if s='South' then
        begin
          jh(1,5);
          jh(2,3);
          jh(3,5);
        end;
      if s='Right' then
        begin
          jh(5,6);
          jh(4,6);
          jh(3,6);
        end;
      if s='Left' then
        begin
          jh(3,6);
          jh(4,6);
          jh(5,6);
        end;
      ans:=ans+a[1];
    end;
  writeln(ans);
end;
begin
  init;
end.
  相关解决方案