天天看点

掷骰子游戏 华为机试

掷骰子游戏

  • 问题描述:

在掷骰子游戏中,会根据所掷数字在地图中前进几步,前进完成后需要根据当前地图位置所示的障碍进行相应操作,其中障碍表示:

1)  9:无障碍

2)  1:停掷一轮,即下轮所掷数字无效;

3)  2:后退两步,如果已经到起点不再后退;

4)  3:奖励前进一步

如果在游戏过程中,已经走到地图终点,则游戏结束。根据输入的地图数组,和5个骰子数的数组,返回最终玩家前进了多少步。

  • 要求实现函数:

void dice(int map_len,int* map, int* dice_val, int* output)

【输入】  int map_len,地图数组的长度

          int* map,地图数组,值表示障碍

int* dice_val,5个骰子数的数组

【输出】  int *output,玩家共前进了多少步

【返回】  无

注:玩家是从起始位置开始,即地图数组的第一位,骰子数只能是1~6

  • 示例

1) 输入:map_len = 15, map ={9,1,9,9,9,2,9,9,9,9,9,9,9,9,9},dice_val = {1,2,1,3,1},

返回:4

2) 输入:map_len = 16, map ={9,9,9,9,9,1,9,3,9,9,2,9,9,9,9,9},dice_val = {2,1,4,1,6},

返回:15

#include "stdafx.h"
#include <iostream>
using namespace std;

void dice(int map_len, int* map, int* dice_val, int* output)
{
	int step = 0;
	int num_val = 0;
	const int diceLength =  5;

    for ( int i = 0; i < map_len && num_val < diceLength; )
    {
		if ( map[i] == 9 )   
		{
			i += dice_val[num_val];
			step += dice_val[num_val];
			++num_val;
		}
		else if ( map[i] == 1)
		{
		   i += dice_val[  ++num_val ];
		   step += dice_val[num_val];
		   ++num_val;
		   
		}
		else if ( map[i] == 2 )
		{
			if ( i > 1 )  
			{
                 i = i - 2;
				 step -= 2;
			}
			else if( i == 1 )
			{
				i = 0;
				--step;
			}
			else if( i == 0 )
			{
				i = 0;
			}
	
		}
		else if( map[i] == 3 )
		{
			++i; 
			++step;
		}
    }
	*output = step;
}

int _tmain(int argc, _TCHAR *argv[])
{
	int map[] = {9,9,9,9,9,1,9,3,9,9,2,9,9,9,9,9};
	int dice_val[] = {2,1,4,1,6};
	int result = 0;

	dice(16, map,dice_val, &result);

	cout<<result<<endl;
}
           

继续阅读