杭电计算机复试2012笔试题目解答

/*写一个程序将十进制数转变为十六进制输出,每行输入一个十进制数,当输入数为0,程序结束
#include<cstdio>

char wei[16]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
char hex[20];//字符数组存储最终结果 ,逆序输出 
//除基取余倒级联 
int decToHex(int n){
	int hex_wei=0;
	int temp;
	do{
		temp=n%16;//取余数 
		n=n/16;
		hex[hex_wei++]=wei[temp]; 
	}while(n!=0);
	return hex_wei;
} 

int main(){
	int n;
	while(scanf("%d",&n)!=EOF,n){
		int hex_wei=decToHex(n);
		for(int i=hex_wei-1;i>=0;i--){
		printf("%c",hex[i]);
		}
	}	
	return 0;
} 
*/

/*贪吃蛇:,只有头和尾移动,注意头能移动到刚刚尾巴移动空出的空格处,头除了次头所在位置方向
不能移动之外,其余三个方向都能移动,撞到自己或者板子都会死亡
给出一系列移动步骤,判断会死亡还是自由航行
初始在蛇尾(25,11)和蛇头(25,30)的水平线位置长20,蛇在运动时,只需要改变蛇头和蛇尾两个位置即可
即蛇头移动一个位置之后,将蛇尾放到蛇头原来的位置,然后最后一个是蛇尾,
13
SWWWWWWWWWNEE
18
NWWWWWWWWWWSESSSWS
30
EEEEEEEEEEEEEEEEEEEEEEEEEEEEEE

#include<cstdio> 
#include<cstring>
//需要用一个数组记录蛇身每个位置 
struct snake{
	int x,y;
}s[20];//蛇长20 

int main(){
	int n;//n为蛇移动步数
	char str[100]; 
	while(scanf("%d",&n)!=EOF,n){//输入n=0结束 
		for(int i=0;i<20;i++){//s[0]蛇尾,s[19]蛇头 ,初始化位置 
			s[i].x=25;
			s[i].y=11+i;
		} 
		gets(str);//输入一个字符串
		int len=strlen(str);
		//先判断蛇头下一次移动会成功还是撞墙等,若成功再移动蛇其他位置
		int k;
		for(k=0;k<len;k++){
			//先让蛇头移动,在判断 
			int headx=s[19].x ;//为了不改变s[19]蛇头的位置值,后面更新蛇身位置用到 
			int heady=s[19].y;
		//	printf("%d %d\n",headx,heady);
			switch(str[k]){
				case 'N':headx=headx-1;break;//蛇头向上移动 
				case 'S':headx=headx+1;break;
				case 'E':heady=heady+1;break;//往东往右 
				case 'W':heady=heady-1;break;
			}
		//	printf("%d %d\n",headx,heady);
			//只需要判断蛇头的情况即可 
			if(headx<1 || headx>50 || heady<1 || heady>50){//蛇头撞墙 
				printf("The worm ran off the board on move %d\n",k+1);
				break;//跳出外层的for循环即结束字符判断 
			} 
			bool cflag=0;
			for(int j=19;j>0;j--){//除了蛇尾0不需要判断,其余位置需要判断 
				if(headx ==s[j].x && heady==s[j].y){
					printf("The worm ran into itself on move %d\n",k+1);
	//				printf("%d %d",s[j].x,s[j].y);
					cflag=1;
					break;
				} 
			} 
			if(cflag==1) break;//跳出最外层的for循环
			//可以,移动剩下的身子 
			for(int j=0;j<19;j++){//
				s[j].x=s[j+1].x;
				s[j].y=s[j+1].y;
			} 
			s[19].x=headx;
			s[19].y=heady;
		}
		if(k==n){
			printf("The worm successfuly made all %d moves\n",n);
		} 	
	}
	return 0;
} 
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值