掷骰子游戏 华为机试

来源:互联网 发布:在线学习算法 编辑:程序博客网 时间:2024/05/19 20:48

掷骰子游戏

  • 问题描述:

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

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;}



原创粉丝点击