革命尚未成功

————同志仍需努力————

shinnyblue

导航

统计

L1-002 打印沙漏

复制代码
#include<iostream>
using namespace std;
int n,k=1,rest;//k是倒三角的层数
char ch;
void fun(int space,int c){
    while (space--)
    {
        cout<<" ";
    }
    while (c--)
    {
        cout<<ch;
        if (!c)
        {
            cout<<endl;
        }
        
    }
    
}
int space=0,c=0;
int main()
{
    cin>>n>>ch;
    //思路:先算给定的n可以盖几层,由层数推得顶层字符数,依次打印即可
    //总数:n
    //实际上用掉的个数:num
    //就倒三角来看,层数k和沙漏字符总数有一定的关系
    //所以不妨枚举倒三角层数并顺手算出这个情况下的沙漏所需字符数,由此推得给定的n个字符中有多少是实际用上的
    //
    //对于倒三角而言,第k层的字符数为2*k-1(从下往上数,也就是从倒三角的顶点处开始往上数)
    //由数列公式,倒三角(2*k-1+1)*k>>1=k*k,沙漏2*k*k-1
    while (2*k*k-1<=n)//计算倒三角的层数
    {
        k++;
    }
    --k;
    rest=n-2*k*k+1;

    //如何打印?
    c=2*k-1;
    for (size_t i = 0; i < k; i++)
    {
        fun(space,c);
        space++;
        c-=2;
    }
    space-=2;
    c+=4;
    for (size_t i = 0; i < k-1; i++)
    {
        fun(space,c);
        space--;
        c+=2;
    }
    cout<<rest;

    return 0;
}
复制代码

 题目链接:题目详情 - L1-002 打印沙漏 (pintia.cn)

posted on   ShinnyBlue  阅读(45)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
Live2D
欢迎阅读『L1-002 打印沙漏』
点击右上角即可分享
微信分享提示