C语言实现沙漏图案打印:优化您的代码,高效利用符号

问题描述:

给定一个正整数 N 和一个符号,编写 C 语言程序,将这些符号打印成沙漏形状。沙漏形状的特点是:

  • 每行输出奇数个符号。
  • 各行符号中心对齐。
  • 相邻两行符号数差 2。
  • 符号数先从大到小顺序递减到 1,再从小到大顺序递增。
  • 首尾符号数相等。

目标:

打印出尽可能多的符号,形成最大的沙漏形状,并输出剩余未使用的符号数量。

输入格式:

输入在一行给出 1 个正整数 N(≤1000)和一个符号,中间以空格分隔。

输出格式:

首先打印出由给定符号组成的最大的沙漏形状,最后在一行中输出剩下没用掉的符号数。

示例:

输入样例:

19 *

输出样例:

*****
 ***
  *
 ***
*****
2

思路:

  1. 用一个数组存放每行输出的符号个数。
  2. 从第一行开始,每行输出的符号个数先增后减。
  3. 终止条件是剩余的符号个数不足以输出下一行。
  4. 输出完毕后,剩余的符号个数就是没有用掉的符号个数。

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 语言实现沙漏图案打印的算法和代码,并提供了优化建议。通过使用数组存储每行符号个数,以及使用循环控制打印过程,我们可以高效地利用给定的符号,创建完美的沙漏形状。

C语言实现沙漏图案打印:优化您的代码,高效利用符号

原文地址: https://www.cveoy.top/t/topic/oNDO 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录