NCWUOJ1695——骰子

1695: 骰子 
题目描述

silechen有一颗骰子,他喜欢跟骰子玩游戏,一开始他将骰子平放在地上,然后骰子按照silechen的指令在地上滚动,silechen想将知道骰子每次接触地面的面(也就是骰子的下面)的值加起来是多少(注意,一开始接触地面的值也要算进去)? 

输入

第一行是数据组数 1<=T<=10 

    接下来每组数据 

    第一行是6个整数,表示骰子的前、后、左、右、上、下的值是多少 

    第二行1<=n<=100000 

    第三行是n个整数,表示silenchen每次发出的指令 

    指令有4种 

    0:表示骰子向前滚动一次 

    1:表示骰子向后滚动一次 

    2:表示骰子向左滚动一次 

    3:表示骰子向右滚动一次 

输出

输出T行,每行一个整数ans,表示每次骰子接触地面的面加起来的值(保证ans在int范围内)

样例输入

1

1 2 3 4 5 6

4

0 1 2 3

样例输出

22

很有意思的一道题目,大概是考验空间想象力的吧,脑子都快想炸了

思路:设置 6 个变量,up, down, left, right, front, behind ,在每一次翻转的时候都将他们重新赋值就行了

#include 

int main(){
	int f,b,l,r,u,d,now,sum;
	int t,n,v;
	scanf( "%d",&t );
	while( t-- ){
		scanf( "%d%d%d%d%d%d",&f,&b,&l,&r,&u,&d );
		scanf( "%d",&n );
		sum = now = d;
		while( n-- ){
			scanf( "%d",&v );
			if( v == 0 ){
				now = f;
				f = u;
				u = b;
				b = d;
				d = now;
			} else if( v == 1 ){
				now = b;
				b = u;
				u = f;
				f = d;
				d = now;
			} else if( v == 2 ){
				now = l;
				l = u;
				u = r;
				r = d;
				d = now;
			} else {
				now = r;
				r = u;
				u = l;
				l = d;
				d = now;
			}
			sum += now;
		}
		printf( "%d\n",sum );
	}
}

 

你可能感兴趣的:(模拟)