TOJ_1001解题报告

简介:
排版题.输出排列成菱形的字母

Problem

输入N值,编程输出如下图形。

Input

一个整数N(1<=N<=7)。

Output

排列成菱形的大写字符,首字符为Z,以后依次为Y,X...

Sample Input

3
                
Sample Output

    Z
                Y   X
                W       V
                U   T
                S
                

=============================================
分析:
         我初步的思路:因为要输出的菱形是上下对称的,因此只需要考虑图形的上半部分,并且将上半部分中特殊的第一行和中间的一行单独考虑,其他行一起考虑。

代码如下:
         
//////////////////////
////1001.cpp
/////////////////////
#include <stdio.h>
char c='Z';
int n;

void printLineOne(int t)
{
    int i;
    for(i=1;i<=(t-1)*2;i++)
        printf(" ");
    printf("%c\n",c);
    c=c-1;
}

void printMiddleLine(int t)
{
    int i;
    printf("%c",c);
    c=c-1;
    for(i=1;i<=t*4-5;i++)
        printf(" ");
    printf("%c\n",c);
    c=c-1;
}

void printOtherLine(int t)
{
    int i;
    for(i=1;i<=(n-t)*2;i++)
        printf(" ");
    printf("%c",c);
    c=c-1;
    for(i=1;i<=t*4-5;i++)
        printf(" ");
    printf("%c\n",c);
    c=c-1;
}

int main()
{
    int i;
    scanf("%d",&n);
    if(n==1)
    {
        printf("Z\n");
    }
    else
    {
        printLineOne(n);
        for(i=2;i<=n-1;i++)
        {
            printOtherLine(i);
        }
        printMiddleLine(n);
        for(i=n-1;i>1;i--)
        {
            printOtherLine(i);    
        }
        printLineOne(n);
    }
    return 0;
}



再仔细分析各行的特点之后,发现其实不用把第一行和中间行独立出来,而是可以综合各行一起考虑的。

代码如下:
   
//////////////////////
////1001.cpp
/////////////////////
#include <stdio.h>

char ch='Z';
int n;

void printLine(int t)
{
    int i;
    for(i=1;i<=(n-t)*2;i++)
    {
        printf(" ");
    }
    printf("%c",ch);
    ch=ch-1;
    if(t==1)
    {
        printf("\n");
        return;
    }
    else
    {
        for(i=1;i<=t*4-5;i++)
        {
            printf(" ");
        }
        printf("%c\n",ch);
        ch=ch-1;
    }
}


int main()
{
    scanf("%d",&n);
    int i;
    if(n==1)
    {
        printf("Z\n");
    }
    else
    {
        for(i=1;i<=n;i++)
        {
            printLine(i);
        }
        for(i=n-1;i>=1;i--)
        {
            printLine(i);
        }
    }
    return 0;
}
心得:此题最烦的地方是输出的格式,一定要注意看清楚题目给的Sample的格式要求,另外就是对行与行之间异同点的分析。



本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2006/06/08/420553.html,如需转载请自行联系原作者
目录
相关文章
|
9月前
|
开发框架 安全 .NET
【Azure Developer】.NET Aspire 项目本地调试遇 Grpc.Core.RpcException 异常( Error starting gRPC call ... )
Error starting gRPC call. HttpRequestException: The SSL connection could not be established, see inner exception. AuthenticationException: The remote certificate is invalid because of errors in the certificate chain: UntrustedRoot
178 12
|
人工智能 数据安全/隐私保护
人工智能伦理:我们如何确保AI的正义与道德?
【8月更文挑战第7天】在AI技术飞速发展的今天,伦理问题逐渐浮出水面。本文深入探讨了AI伦理的重要性,分析了当前面临的挑战,并提出了确保AI应用正义与道德的可能途径。通过具体案例分析,文章揭示了AI决策过程中潜在的偏见和歧视问题,强调了建立全面伦理框架的必要性。最后,文章呼吁全社会共同努力,推动AI技术的健康发展。
|
C语言 C++
CLion2022安装与使用
CLion2022安装与使用
341 0
CLion2022安装与使用
【实用技巧】下载音乐到本地电脑
【实用技巧】下载音乐到本地电脑
1303 0
|
小程序
【支付宝商家助手】正式上线——随时随地移动管理 助力经营
【支付宝商家助手】正式上线——随时随地移动管理 助力经营
660 11
|
缓存 算法
总结两种常见的长列表分页缓存策略
通常,对于长列表加载的场景,都需要进行分页, 如最近的世界杯体育垂站项目中的赛程页,评论流,直播流。而为了提高分页加载的性能,往往需要对分页进行缓存。 下面总结对两种常见的分页缓存的策略, 适用场景以及各自的优缺点。     策略一: 直接对分页结果缓存 顾名思义,就是直接缓存每次分页查询的结果。  
8380 0
|
算法 数据可视化 前端开发
这几个算法可视化网站,太牛了!
很多初学者在学习数据结构与算法的时候,都会觉得很难,很大一部分是因为数据结构与算法本身比较抽象,不好理解。对于这一点,可以通过一些可视化动画来帮助理解。
1441 1
|
负载均衡
VRRP 的作用
VRRP的主要作用是提供网络设备的冗余和故障转移功能,以确保网络的高可用性。具体来说,VRRP的作用包括: 1. 提供设备冗余:VRRP允许多个设备组成一个逻辑组,并指定其中一个设备为主设备,其他设备为备份设备。主设备处理数据包并提供服务,备份设备处于待命状态,以便在主设备故障时接管工作。 2. 实现故障转移:当主设备发生故障或不可用时,VRRP中的备份设备会自动接管主设备的功能,并继续提供服务,而无需手动干预。这意味着网络中的数据流可以在故障发生时无缝切换到备份设备上,提高了网络的可用性。 3. 维护网络连通性:VRRP组中的设备通过定期发送状态信息来保持同步。这种状态信息包括各设备的
757 0
|
机器学习/深度学习 数据采集 人工智能
AIGC:AI插画
AIGC:AI插画 文章末尾有插画生成内容
669 0
|
域名解析 安全 应用服务中间件
阿里云服务器安装WordPress详细教程
阿里云服务器安装WordPress详细教程
阿里云服务器安装WordPress详细教程