题目要求:掷的骰子的号码决定你走的步数,比如1代表你可以走一步。在地图的每个位置上又有一个数字,来表示规则:9表示没有障碍,不做处理,3代表奖励前进一步,2代表后退两步,1代表下一次掷的筛子无效,没有其他的元素了。
题目很简单:要掷5次筛子(for循环5次即可),先通过掷的号码决定走几步(switch语句来选择),走了之后,只要没超过终点,都还看当前位置上的数字,这还是个循环的过程,比如当前数字为3,你前进一步之后,当前数字变为了2,这时又需要后退两步(最多回到起点,即不能退到起点以后),依此类推,直到到达终点或者掷骰子的次数已到。
程序很简单,需要注意的地方在程序中均有注明,经验证一些案例,没有问题。如若有问题还望指出:
/* dice_game.cpp : 定义控制台应用程序的入口点。 华为机试小题目:掷骰子决定你在地图上走几步,掷的数字就代表你走几步,在地图上同样有个数字,让你再做一次处理, 比如9代表不做处理,1代表下一次掷的筛子无效,2代表后退两步,3代表奖励前进一步。题目要求模拟该过程,返回最后总共走了多少步。 time:2012.9.16 author: zy */ #include "stdafx.h" #include<iostream> using namespace std; void dice(int *map, int *dic, int length, int *output); int _tmain(int argc, _TCHAR* argv[]) { int map[15]= {9,9,9,9,9,9,1,9,9,9,9,3,9,9,9}; //地图每一步上代表的数值,'9'不做处理,'3'奖励前进一步,'2'后退两步,'1'下一次所掷骰子无效 int dic[5] = { 1,2,3,4,5 }; //所掷5次筛子的号码数,默认5次,可以增加一个像length一样的变量做处理 int length = sizeof(map)/4; //sizeof(数组名)返回的是数组的大小,单位是字节,而不是数组元素的个数 int output = 0; dice(map,dic, length, &output); cout <<"you have gone " << output <<" steps "<<endl; while(1); return 0; } void dice(int *map, int *dic, int length, int *output) { int i=0; for( ; i<5; i++) { switch (dic[i]) { case 1: (*output)+=1;break; case 2: (*output)+=2;break; case 3: (*output)+=3;break; case 4: (*output)+=4;break; case 5: (*output)+=5;break; case 6: (*output)+=6;break; default : cout <<" wrong number"<<endl; } while( (*output)< length ) { if( map[(*output)] ==9 ) break; else if( map[(*output)] == 2 ) { (*output) -= 2; if((*output) < 0) (*output)=0; } else if( map[(*output)] == 1) { i++; break; } else if( map[(*output)] == 3) { (*output) += 1; } else { cout<<"the number is wrong!"<< endl; break; } } if( (*output)>=length) { (*output) = length; cout<<" you have reached the destination!"<<endl; break; } } }