曼哈顿距离的应用

题目描述
先要求你从键盘输入一个整数n(1<=n<=9),打印出指定的数字图形。
本题请注意循环输入
输入
输入包含多组测试数据。每组输入一个整数n(1<=n<=9)。
输出
对于每组输入,输出指定的数字图形。
注意:每行最后一个数字后没有任何字符。
样例输入
5
样例输出
在这里插入图片描述
解题思路链接

AC代码:

#include <iostream>
#include <cstdio>

using namespace std;

int main()
{
    int n;
    while (cin >> n)
    {
        //中心点坐标的选取:如输入5,则(5,5)为中心点
        int cx = n;
        int cy = n;
        
        //从(1,1)点开始遍历坐标系
        for (int i = 1;i <= 2 * n - 1;i++)
        {
            for (int j = 1;j <= 2 * n - 1;j++)
            {
                if (abs(cx - i) + abs(cy - j) == n - 1) printf("1");
                else if (abs(cx - i) + abs(cy - j) == n - 2) printf("2");
                else if (abs(cx - i) + abs(cy - j) == n - 3) printf("3");
                else if (abs(cx - i) + abs(cy - j) == n - 4) printf("4");
                else if (abs(cx - i) + abs(cy - j) == n - 5) printf("5");
                else if (abs(cx - i) + abs(cy - j) == n - 6) printf("6");
                else if (abs(cx - i) + abs(cy - j) == n - 7) printf("7");
                else if (abs(cx - i) + abs(cy - j) == n - 8) printf("8");
                else if (abs(cx - i) + abs(cy - j) == n - 9) printf("9");
                else printf(" ");
            }
            printf("\n");
        }
    }
    return 0;
}

但是让我疑惑的地方是如果不加else,就会输出很多空格,只有9后面就不输出,代码如下,有哪位大佬看见了麻烦帮忙解答

#include <iostream>
#include <cstdio>

using namespace std;

int main()
{
    int n;
    while (cin >> n)
    {
        //中心点坐标的选取:如输入5,则(5,5)为中心点
        int cx = n;
        int cy = n;
        
        //从(1,1)点开始遍历坐标系
        for (int i = 1;i <= 2 * n - 1;i++)
        {
            for (int j = 1;j <= 2 * n - 1;j++)
            {
                if (abs(cx - i) + abs(cy - j) == n - 1) printf("1");
                if (abs(cx - i) + abs(cy - j) == n - 2) printf("2");
                if (abs(cx - i) + abs(cy - j) == n - 3) printf("3");
                if (abs(cx - i) + abs(cy - j) == n - 4) printf("4");
                if (abs(cx - i) + abs(cy - j) == n - 5) printf("5");
                if (abs(cx - i) + abs(cy - j) == n - 6) printf("6");
                if (abs(cx - i) + abs(cy - j) == n - 7) printf("7");
                if (abs(cx - i) + abs(cy - j) == n - 8) printf("8");
                if (abs(cx - i) + abs(cy - j) == n - 9) printf("9");
                printf(" ");
            }
            printf("\n");
        }
    }
    return 0;
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值