#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");
}
数据结构自测题
最新推荐文章于 2022-11-25 18:37:39 发布