727. 菱形 (曼哈顿距离)
本文最后更新于 890 天前,其中的信息可能已经有所发展或是发生改变。

727. 菱形 (曼哈顿距离)

原题链接
描述
输入一个奇数 n,输出一个由 * 构成的 n 阶实心菱形。

输入格式
一个奇数 n。

输出格式
输出一个由 * 构成的 n 阶实心菱形。

具体格式参照输出样例。

数据范围
1≤n≤99
输入样例:

5

输出样例:

  *  
 *** 
*****
 *** 
  *  

分析:

  • 循环n次,每一行按照规律打印" ""*"

规律寻找
1.观察法

  • (n+1)/2处为分界线分别向上下延申打印输出

2.利用曼哈顿距离

  • 以中心点向边界打印,打印输出曼哈顿距离l <= (n-1)/2的点
    曼哈顿距离:矩阵任意一点只通过横向或纵向移动到达中心点的距离
    计算公式:x(x1,y1)到中心点m(x2,y2)
l = abs(x1-x2) + abs(y1-y2)

代码
1.观察法解:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    int n;
    cin>>n;
    for(int i=1,k=1;i<=n;i++){

        for(int j=1;j<=(n+1)/2-k;j++){
            cout<<" ";
        }
        for(int j=0;j<k*2-1;j++){
            cout<<"*";
        }
        cout<<endl;
        if(i>=(n+1)/2){
            k--;
        }
        else k++;
    }

    return 0;
}

2.曼哈顿解:

//曼哈顿解 
#include <bits/stdc++.h> 
using namespace std;
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(abs((n+1)/2-i)+abs((n+1)/2-j)<=(n-1)/2){  //计算曼哈顿距离
                cout<<"*";
            }
            else cout<<" ";
        }
        cout<<endl;
    }
    return 0;
}

扩展:只打印边框,不打印内部的空心菱形
例题:ZZULIOJ 1077: 空心菱形 原题链接
分析:

  • 打印曼哈顿距离==(n-1)/2"*"

代码:

#include <bits/stdc++.h> 
using namespace std;
int main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            if(abs((n+1)/2-i)+abs((n+1)/2-j)==(n-1)/2){  //计算曼哈顿距离
                cout<<"*";
            }
            else cout<<" ";
        }
        cout<<endl;
    }
    return 0;
}

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇