码迷,mamicode.com
首页 > 其他好文 > 详细

2道编程题目(2012):1.进制转换;2.贪食蛇的方向

时间:2018-02-27 01:17:39      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:div   理解   ret   成功   details   编程   head   位置   net   

//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格,头往四个方向移动,每次移动一格,判断是成功、出界还是撞到自己。
* 输入第一行为移动的步数,第二行为这些步数的方向,输出判断。
*/

#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

2道编程题目(2012):1.进制转换;2.贪食蛇的方向

标签:div   理解   ret   成功   details   编程   head   位置   net   

原文地址:https://www.cnblogs.com/BlueBlue-Sky/p/8476585.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!