• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
james1207

博客园    首页    新随笔    联系   管理    订阅  订阅

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

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


posted @ 2013-08-12 19:35  Class Xman  阅读(586)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3