骰子游戏问题

题面:

现在要求你编写一道程序来模拟骰子的滚动。骰子不滑动也不跳动,只在桌子上向四个方向滚动,即东西南北。每次一开始,玩家使骰子的面值1,2,3对应上,北,西。骰子的相对两面的和都为7. 你的程序能接受一系列的输入命令,命令内容为north,south,east,west。如north,指骰子向北滚动一次,北面变为底面,上面变为北面。滚动角度为90°。你的程序必须计算出骰子最后朝上的数字。

输入:

输入包括一系列命令序列,每个序列对应新游戏的开始,其第一行是一个整数n(0<n<=1024),表示命令条数;接下来n行为命令。输入0表示输入结束。

输出:

对于每一个命令序列,输出骰子最后朝上的数字。

输入举例:

1
north
3
north
east
south
0

输出举例:

5
1

 

 

思路:记录每次滚动后的上北西三面的面值(a,b,c)。

代码:

 1 #include <fstream>
 2 #include <iostream>
 3 #include <algorithm>
 4 #include <cstdio>
 5 #include <cstring>
 6 #include <cmath>
 7 #include <cstdlib>
 8 
 9 using namespace std;
10 
11 #define PI acos(-1.0)
12 #define EPS 1e-10
13 #define lll __int64
14 #define ll long long
15 #define INF 0x7fffffff
16 
17 int n;
18 char s[10];
19 
20 int main()
21 {
22     //freopen("D:\\input.in","r",stdin);
23     //freopen("D:\\output.out","w",stdout);
24     while(scanf("%d",&n),n){
25         getchar();
26         int a=1,b=2,c=3,aa,bb,cc;
27         for(int i=0;i<n;i++){
28             gets(s);
29             if(s[0]=='n'){
30                 aa=7-b;
31                 bb=a;
32                 cc=c;
33             }else if(s[0]=='s'){
34                 aa=b;
35                 bb=7-a;
36                 cc=c;
37             }else if(s[0]=='w'){
38                 aa=7-c;
39                 bb=b;
40                 cc=a;
41             }else{
42                 aa=c;
43                 bb=b;
44                 cc=7-a;
45             }
46             a=aa;
47             b=bb;
48             c=cc;
49         }
50         printf("%d\n",a);
51     }
52     return 0;
53 }
View Code

 

posted @ 2015-03-20 10:54  jiu~  阅读(955)  评论(0编辑  收藏  举报