华为机试题——掷骰子游戏
/*问题描述: 在掷骰子游戏中,会根据所掷数字在地图中前进几步,前进完成后需要根据当前地图位置所示的障碍进行相应操作,其中障碍表示: 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 */ /* 题意不清!!每次筛子zhi完一次后,是否只执行一次操作??这里假设就一次操作 */ #include <iostream> using namespace std; void dice(int map_len,int *map,int *dice_val,int* output) { int i; int j; j=0; int len=map_len; int suspend=0; for(i=0;i<5;i++) { if(suspend==1) { suspend=0; continue; } j+=dice_val[i]; if(j>=len-1) { *output=len-1; return; } if(map[j]==2) j=((j-2<0)?(0):(j-2)); else if(map[j]==3) { j+=1; if(j>=len-1) { *output=len-1; return; } } else if(map[j]==1) suspend=1; } *output=j; return; } int main(void) { int map_len=15; int map[15]={9,1,9,9,9,2,9,9,9,9,9,9,9,9,9}; int dice_val[5]={1,2,1,3,1}; int output; dice(map_len,map,dice_val,&output); cout<<output<<endl; int map_len2=16; int map2[16]={9,9,9,9,9,1,9,3,9,9,2,9,9,9,9,9}; int dice_val2[5]={2,1,4,1,6}; int output2; dice(map_len2,map2,dice_val2,&output2); cout<<output2<<endl; system("pause"); return 0; }