在掷骰子游戏中,会根据所掷数字在地图中前进几步,前进完成后需要根据当前地图位置所示的障碍进行相应操作,其中障碍表示:
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<iostream> using namespace std; void dice(int len, int* map, int* dice_val, int* output) { int i=0,j=0,step=0; for(;i<len&&j<5;) { step = dice_val[j++]; i += step; if(i>=len-1)//如果在游戏过程中,已经走到地图终点,则游戏结束。 { *output = len-1; return; } if(map[i]==9) continue; else if(map[i]==1) j++; else if(map[i]==2) { if(i-2>=0) i -=2; else i = 0; } else if(map[i]==3) { i++; if(i>=len-1)//如果在游戏过程中,已经走到地图终点,则游戏结束。 { *output = len-1; return; } } } *output = i; } void main() { int map_len=16; int map[16]={9,9,9,9,9,1,9,3,9,9,2,9,9,9,9,9}; int dice_val[5]={2,1,4,1,6}; int* output=new int; dice(map_len, map, dice_val,output); cout<<*output; cout<<endl; }
华为历年试题(掷骰子游戏 7),布布扣,bubuko.com
原文地址:http://www.cnblogs.com/Xylophone/p/3811030.html