数据结构自测题

在这里插入图片描述

#include<stdio.h>
#include<math.h>

void printSpace(int maxAmountOfSymInLine, int amountOfSymbolInLine);
void printfSymbol(int amountOfSymbolInLine, char symbol);

int main(int argc, char const *argv[])
{
    //用户提供的符号数
    int amountOfSymbol= 0;
    //用户提供的符号
    char symbol;
    scanf("%d %c", &amountOfSymbol , &symbol);
    //能够生成的最大行数
    int line = sqrt((amountOfSymbol + 1) / 2);
    //每行的符号个数
    int amountOfSymbolInLine;
    //最大一行的个数
    int maxAmountOfSymInLine = line * 2 - 1;
    //剩下的符号数
    int leftAmountOfSym = amountOfSymbol - (2 * line * line - 1);
    //输出符号
    for(int i = line; i >= 1; i--)
    {
        amountOfSymbolInLine = i * 2 - 1;
        //输出空格
        printSpace(maxAmountOfSymInLine, amountOfSymbolInLine);
        //输出符号
        printfSymbol(amountOfSymbolInLine, symbol);
    }
    for(int i = 2; i <= line ; i++)
    {
        //每一行中的符号数量
        amountOfSymbolInLine = i * 2 - 1;
        //输出空格
        printSpace(maxAmountOfSymInLine, amountOfSymbolInLine);
        //输出符号
        printfSymbol(amountOfSymbolInLine, symbol);
    }
    //输出剩下的字符数
    printf("%d",leftAmountOfSym);
    return 0;
}
/**
 * 根据最大行的字符数输出空格,用书中心对齐
 * @int maxAmountOfSymInLine 最大的行的字符数(最大宽度)
 * @ amountOfSymbolInLine 每一行的符号数量
 */
void printSpace(int maxAmountOfSymInLine, int amountOfSymbolInLine)
{
    int amountOfSpace = (maxAmountOfSymInLine - amountOfSymbolInLine) / 2 ;
    for(int k = 1; k <= amountOfSpace; k++)
    {
        printf(" ");
    }
}
/**
 * 根据每一行的符号数量输出组成沙漏的字符
 * @int amountOfSymbolInLine 每一行的符号数量
 * @char symbol 输出所使用的符号
 */
void printfSymbol(int amountOfSymbolInLine, char symbol)
{
    for(int j = 0; j < amountOfSymbolInLine; j++ )
    {
        printf("%c",symbol);
    }
    printf("\n");
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘璐菲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值