• 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 ");
    }
    else
    {
    for (int j = i-1; j >= 0; j--)
    {
    printf("%c", str[j]);
    }
    printf(" ");
    }

    }
    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 ", i + 1);
    else if (ranOffBoard)
    printf("The worm ran off the board on move %d ", i + 1);
    else
    printf("The worm successfully made all %d moves ", steps);
    // 继续读下一字符串
    scanf("%d", &steps);
    }
    return 0;
    }

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

    一生有所追!
  • 相关阅读:
    基因id转换
    Trinity的分步运行
    免费的稳定的SVN托管的服务器
    游戏化
    一个华裔男孩在美国的成长之路
    你懂USB和Type-C吗
    ios调试小技巧
    swift开发笔记19
    iOS 3DTouch应用
    iCloud实现APP多设备数据同步
  • 原文地址:https://www.cnblogs.com/BlueBlue-Sky/p/8476585.html
Copyright © 2020-2023  润新知