2012年杭电计算机研究生复试的笔试题目:2道编程题目(2012):1.进制转换;2.贪食蛇的方向

//1.输入一个十进制的数,把它转成十六进制。
//思路:除以16取余,并用字符数组来记录,并倒着输出。
#include<stdio.h>
#define N 100
char str[N];
int main()
{
int n;
int i;
while (~scanf("%d",&n))
{
i = 0;
while (n!=0)
{

if (n%16<10)
{
//加‘0’将其转换为字符
str[i++] = n % 16+'0';
}
else
{
//n%16为10的时候,该十六进制表示为A
str[i++] = n % 16-10+'A';
}
n /= 16;
}
if (i==0)//当输入的是0时
{
printf("0\n");
}
else
{
for (int j = i-1; j >= 0; j--)
{
printf("%c", str[j]);
}
printf("\n");
}

}
return 0;
}

//题目而二,要多理解一下,还是没有特别懂

/*
* 贪吃蛇,给你一个50X50的表格,贪吃蛇初始化在某个位置,自身长度20格,头往四个方向移动,每次移动一格,判断是成功、出界还是撞到自己。
* 输入第一行为移动的步数,第二行为这些步数的方向,输出判断。
*/

/*
*思路:先初始化20格蛇的初始位置,提示输入蛇要移动的步数,再提示输入移动的方向(字符),用字符数组记录移动的全部方向,遍历方向字符数组,对方向字符进行处理。
*首先是头部,根据是东南西北(E S W N)对它的头部做相应的单独处理,并判断头部是否出界或者碰到自身,并用相应的变量来标记,如果该移动该步使其出界或者碰到自身,则跳出该循环,并做出相应的输出提示(就是出界或者碰身);
*如果没有出界或者碰到自身,再对除头部外其他节点进行操作(身体前一节的位置赋值给后一节的位置);
*最后输出移动后的状态(成功、出界、碰到自身)。
*/

#include <stdio.h>

#define WORM_LENGTH 20

int main(void)
{
//short、int 和 long 类型都表示整型值,存储空间的大小不同。一般, short 类型为半个机器字长,int 类型为一个机器字长,而 long 类型为一个或两个机器字长(在 32 位机器中 int 类型和 long 类型通常字长是相同的)。
short h[WORM_LENGTH], v[WORM_LENGTH]; // 用于记录虫子每一节的位置,(v[0], h[0])是头部
short newHead_v, newHead_h; // 移动一步后头部的新位置
int i, j, steps;
int ranIntoItself, ranOffBoard;
char moves[1000];

scanf("%d", &steps); // 读入每个测试用例要移动的步数
while (steps != 0)
{
scanf("%s", moves); // 读入移动方向字符串
// 虫子的初始位置
for (i = 0; i < WORM_LENGTH; ++i)
{
h[i] = 30 - i;
v[i] = 25;
}
ranIntoItself = ranOffBoard = 0;
for (i = 0; i < steps; ++i)
{
// 计算移动一步后头部的位置
newHead_h = h[0];
newHead_v = v[0];
switch (moves[i])
{
case 'E':
newHead_h++;
break;
case 'S':
newHead_v++;
break;
case 'W':
newHead_h--;
break;
case 'N':
newHead_v--;
break;
}
// 判断是否碰到自己的身体
for (j = 1; j < WORM_LENGTH - 1; ++j) // 由于移动后尾部位置已前移一格,所以是WORM_LENGTH - 1
{
if (newHead_h == h[j] && newHead_v == v[j])
{
ranIntoItself = 1;
break;
}
}
// 判断是否碰到边缘
if (newHead_h == 0 || newHead_h == 49 || newHead_v == 0 || newHead_v == 49)
ranOffBoard = 1;
if (ranIntoItself || ranOffBoard)
break;
// 移动虫子除头部后的几节
for (j = WORM_LENGTH - 1; j > 0; --j)
{
h[j] = h[j - 1];
v[j] = v[j - 1];
}
h[0] = newHead_h;
v[0] = newHead_v;
}
// 输出移动后的状态
if (ranIntoItself)
printf("The worm ran into itself on move %d\n", i + 1);
else if (ranOffBoard)
printf("The worm ran off the board on move %d\n", i + 1);
else
printf("The worm successfully made all %d moves\n", steps);
// 继续读下一字符串
scanf("%d", &steps);
}
return 0;
}

 

参考博客:http://blog.csdn.net/Hackbuteer1/article/details/6678851

posted @ 2018-02-26 22:58  林木子  阅读(183)  评论(0编辑  收藏  举报