1027. 打印沙漏(20)
原题: https://www.patest.cn/contests/pat-b-practise/1027
实现思路: 假如把题目中的空格, 替换成+号, 那么一个测试输入输出如下:
输入:
19 *
输出:
*****
+***
++*
+***
*****
2
此题相信大家都有思路, 主要是注意坑.
坑1: *号后面是不可以有空格的.
坑2: 就算剩余符号个数为0, 仍然要把0打印出来.
完整代码:
#include <stdio.h>
void print (int n, char ch, int maxLen);
int main (void) {
int res[1000];
int len = 0; // 结果数据长度
int leave = 0; // 剩下没用掉的符号数
int sum = 1; // 符合条件数据和
int i = 3; // 1 情况特殊, 单独考虑
int n; // 给定的符号数
char symbol; // 要打印的符号
scanf("%d %c", &n, &symbol);
while ((2 * i + sum) <= n) {
sum += 2 * i;
res[len] = i;
len++;
i += 2;
}
leave = n - sum;
// 控制打印
if (len != 0) {
for (i=len-1; i>=0; i--) {
print(res[i], symbol, res[len - 1]);
}
print(1, symbol, res[len - 1]);
for (i=0; i<len; i++) {
print(res[i], symbol, res[len - 1]);
}
} else {
// 输入的符号只有1个的情况
printf("%c\n", symbol);
}
// 经过测试, 就算是刚好用完所有符号, 也要打印剩余
// 符号数, 此时剩余符号数是 0
printf("%d\n", leave);
return 0;
}
// n打印次数, ch打印符号, maxLen一行最大长度
void print (int n, char ch, int maxLen) {
int i;
int space = (maxLen - n) / 2; // 需要打印的空格数
// 打印空格
for (i=1; i<=space; i++) {
printf("+");
}
// 打印符号
for (i=1; i<=n; i++) {
printf("%c", ch);
}
printf("\n");
}
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· C# 13 中的新增功能实操
· Ollama本地部署大模型总结
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(4)
· langchain0.3教程:从0到1打造一个智能聊天机器人
· 用一种新的分类方法梳理设计模式的脉络