C语言实现沙漏图案打印:优化您的代码,高效利用符号
C语言实现沙漏图案打印:优化您的代码,高效利用符号
问题描述:
给定一个正整数 N 和一个符号,编写 C 语言程序,将这些符号打印成沙漏形状。沙漏形状的特点是:
- 每行输出奇数个符号。
- 各行符号中心对齐。
- 相邻两行符号数差 2。
- 符号数先从大到小顺序递减到 1,再从小到大顺序递增。
- 首尾符号数相等。
目标:
打印出尽可能多的符号,形成最大的沙漏形状,并输出剩余未使用的符号数量。
输入格式:
输入在一行给出 1 个正整数 N(≤1000)和一个符号,中间以空格分隔。
输出格式:
首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。
示例:
输入样例:
19 *
输出样例:
*****
***
*
***
*****
2
思路:
- 用一个数组存放每行输出的符号个数。
- 从第一行开始,每行输出的符号个数先增后减。
- 终止条件是剩余的符号个数不足以输出下一行。
- 输出完毕后,剩余的符号个数就是没有用掉的符号个数。
C++代码:
#include <stdio.h>
int main() {
int n, i, j, k, remain;
char symbol;
scanf("%d %c", &n, &symbol);
// 计算沙漏最大行数
int rows = (n + 1) / 2;
// 存储每行符号个数
int num_symbols[rows];
// 初始化第一行符号个数
num_symbols[0] = 1;
// 计算每行符号个数
for (i = 1; i < rows; i++) {
num_symbols[i] = num_symbols[i - 1] + 2;
}
// 打印沙漏上半部分
for (i = 0; i < rows; i++) {
// 打印空格
for (j = 0; j < rows - i - 1; j++) {
printf(" ");
}
// 打印符号
for (k = 0; k < num_symbols[i]; k++) {
printf("%c", symbol);
}
printf("\n");
}
// 打印沙漏下半部分
for (i = rows - 2; i >= 0; i--) {
// 打印空格
for (j = 0; j < rows - i - 1; j++) {
printf(" ");
}
// 打印符号
for (k = 0; k < num_symbols[i]; k++) {
printf("%c", symbol);
}
printf("\n");
}
// 计算剩余符号个数
remain = n;
for (i = 0; i < rows; i++) {
remain -= num_symbols[i];
}
// 输出剩余符号个数
printf("%d\n", remain);
return 0;
}
优化建议:
- 可以使用更简洁的循环语句来生成每行符号个数。
- 可以使用更易懂的变量名。
- 可以使用函数来封装沙漏打印逻辑,提高代码的可读性和可维护性。
总结:
本文介绍了使用 C 语言实现沙漏图案打印的算法和代码,并提供了优化建议。通过使用数组存储每行符号个数,以及使用循环控制打印过程,我们可以高效地利用给定的符号,创建完美的沙漏形状。
原文地址: https://www.cveoy.top/t/topic/oNDO 著作权归作者所有。请勿转载和采集!