• POJ 1806 Manhattan 2025


    POJ 1806 Manhattan 2025

    大意:在一个三维空间里面,有一交通工具通过一单位长度需要一升汽油,现有n升汽油,画出该交通工具在各层的运输情况
          将每一层简化为一个以交通工具所在位置为中心的二维网格图,在可达网格内写入到达该网格所需要的汽油数。
       自底向上画出每一层所在的二维图。
       当n>9时,不需要统计
    Example:
        n = 2 时,若标记当前这一层为0层,则该情况下交通工具所能达到的层次为-2层到2层,即共5层,分别为-2,-1,0,1,2层,
    将每一层的二维图输出即可。题目中要求将最底层即为1,那么在该情况下,上述各层对应为第1,2,3,4,5层,其中交通工
    具所在的位置为第3层。
    分析:
        通过简单的推断可发现,各层的情况以当前交通工具所在层为中心对称,故可用递归实现~

    代码
    #include<stdio.h>
    #include
    <math.h>
    void draw(int n,int row,int floor)//画出距离交通工具所在层floor层的二维图
    {
    int i,j;
    for(i=0;i<row;i++)
    {
    int needi = abs(i-n);//在垂直方向需要的步骤
    for(j=0;j<row;j++)
    {
    int needj = abs(j-n);//水平方向需要的步骤
    int need = needi+needj+floor;
    if(need<=n)printf("%d",need);
    else
    printf(
    ".");
    }
    printf(
    "\n");
    }
    }
    void output(int n,int row,int floor)//共有n汽油,有row行,现在第floor层
    {
    printf(
    "slice #%d:\n",n-floor+1);
    if(n>9)//若汽油大于9
    {
    draw(n,row,floor
    +1);
    return;
    }
    draw(n,row,floor);
    //画下面的第floor层
    if(floor==0)return;
    output(n,row,floor
    -1);//画中间的那一部分
    printf("slice #%d:\n",n+floor+1);
    draw(n,row,floor);
    //上面的第floor层


    }
    int main()
    {
    int T;
    while(scanf("%d",&T)!=EOF)
    {
    int cases;
    for(cases=1;cases<=T;cases++)
    {
    int n;
    scanf(
    "%d",&n);
    printf(
    "Scenario #%d:\n",cases);
    output(n,
    2*n+1,n);
    printf(
    "\n");

    }
    }
    return0;
    }
  • 相关阅读:
    Spring框架之 我对AOP的理解
    第二次分班考试之 ---纠错19/25题
    Spring IOC(控制反转) 和DI
    一级缓存,二级缓存
    多对多连接
    MyBatis 智能标签
    小结javaScriptOOP的对象内容点
    15年错题小结2月
    《Java周边》Http请求模拟工具(postman)
    《Java周边》IDEA 设置快捷键和快捷键中英文对照
  • 原文地址:https://www.cnblogs.com/AndreMouche/p/1946092.html
Copyright © 2020-2023  润新知