骰子游戏问题

题面:

现在要求你编写一道程序来模拟骰子的滚动。骰子不滑动也不跳动,只在桌子上向四个方向滚动,即东西南北。每次一开始,玩家使骰子的面值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

 

你可能感兴趣的:(游戏)