华为机试题——掷骰子游戏

/*问题描述:  
在掷骰子游戏中,会根据所掷数字在地图中前进几步,前进完成后需要根据当前地图位置所示的障碍进行相应操作,其中障碍表示: 
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;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值