当前位置: 首页 > news >正文

第十天:字符菱形

每日一道C++题:字符菱形

问题:给定一个字符,用它构造一个对角线长5个字符,倾斜放置的菱形。
要求:输入只有一行, 包含一个字符;输出该字符构成的菱形。

  1. 最基础的做法:
#include <iostream>
#include <iomanip>
using namespace std;int main() {char ch;cin >> ch;cout << "  " << ch << endl;cout << " " << ch << ch << ch << endl;cout << ch << ch << ch << ch << ch << endl;cout << " " << ch << ch << ch << endl;cout << "  " << ch << endl;return 0;
}
  1. 循环嵌套:

菱形规律:

  • 菱形的行数为 5 行(因为对角线长 5 个字符 )。
  • 每行的字符数量呈现先增加后减少的规律,且两边有空格填充。具体来说:
  • 第 1 行:1 个字符,前面有 2 个空格。
  • 第 2 行:3 个字符,前面有 1 个空格。
  • 第 3 行:5 个字符,前面有 0 个空格。
  • 第 4 行:3 个字符,前面有 1 个空格。
  • 第 5 行:1 个字符,前面有 2 个空格。
#include <iostream>
using namespace std;int main() {char ch;cin >> ch; for (int i = 0; i < 5; i++) {int spaceCount;if (i < 2) {spaceCount = 2 - i;} else {spaceCount = i - 2;}for (int j = 0; j < spaceCount; j++) {cout << " ";}int charCount = 2 * (2 - abs(2 - i)) + 1;for (int k = 0; k < charCount; k++) {cout << ch;}cout << endl;}return 0;
}
  • 外层循环控制行数:
    for (int i = 0; i < 5; i++) :循环 5 次,对应菱形的 5 行。 i 表示当前行数,从 0 到 4 。
  • 对于第 0 行和第 1 行( i < 2 ),空格数量 spaceCount = 2 - i 。例如,当 i = 0 时, spaceCount = 2 ;当 i = 1 时, spaceCount = 1 。
  • 对于第 2 行、第 3 行、第 4 行( i >= 2 ),空格数量 spaceCount = i - 2 。例如,当 i = 2 时, spaceCount = 0 ;当 i = 3 时, spaceCount = 1 ;当 i = 4 时, spaceCount = 2 。
  • 内层循环 for (int j = 0; j < spaceCount; j++) { cout << " "; } :根据计算得到的 spaceCount ,输出相应数量的空格。
  • int charCount = 2 * (2 - abs(2 - i)) + 1; :
  • abs(2 - i) 计算当前行与中间行(第 2 行, i = 2 )的距离。
  • 2 - abs(2 - i) 得到一个系数,乘以 2 再加 1 ,得到当前行要输出的字符数量。例如:

当 i = 0 时, abs(2 - 0) = 2 , 2 - 2 = 0 , charCount = 2 * 0 + 1 = 1 。
当 i = 1 时, abs(2 - 1) = 1 , 2 - 1 = 1 , charCount = 2 * 1 + 1 = 3 。
当 i = 2 时, abs(2 - 2) = 0 , 2 - 0 = 2 , charCount = 2 * 2 + 1 = 5 。
当 i = 3 时, abs(2 - 3) = 1 , 2 - 1 = 1 , charCount = 2 * 1 + 1 = 3 。
当 i = 4 时, abs(2 - 4) = 2 , 2 - 2 = 0 , charCount = 2 * 0 + 1 = 1 。

知识扩展

  1. 菱形的一般规律:
  • 对于对角线长度为 2n - 1 ( n 为正整数 )的菱形,行数为 2n - 1 行。本题中对角线长 5 个字符,即 2n - 1 = 5 ,解得 n = 3 。
  • 每行的空格数量和字符数量都有对称的规律,可以通过数学公式推导得出。例如,对于一般的 n ,第 i 行(从 0 开始计数 )的空格数量为 abs(n - 1 - i) ,字符数量为 2 * (n - 1 - abs(n - 1 - i)) + 1 。
  1. 字符和字符串输出:
  • 本题中只输出单个字符,所以使用 cout << ch; 。如果需要输出字符串,可以使用 cout << “string”; 或者结合字符数组等方式。
  1. 扩展到任意大小的菱形:
  • 可以将代码中的 5 行改为由用户输入的变量,从而构造不同大小的菱形。例如,让用户输入菱形的对角线长度(必须是奇数 ),然后根据上述规律动态生成菱形。代码大致如下:
#include <iostream>
#include <cmath>
using namespace std;int main() {char ch;int n;cin >> ch >> n;int rows = 2 * n - 1;for (int i = 0; i < rows; i++) {int spaceCount = abs(n - 1 - i);for (int j = 0; j < spaceCount; j++) {cout << " ";}int charCount = 2 * (n - 1 - spaceCount) + 1;for (int k = 0; k < charCount; k++) {cout << ch;}cout << endl;}return 0;
}
  • 这里  n  表示菱形的“半长”,对角线长度为  2n - 1  。用户输入字符  ch  和  n  ,程序可以生成不同大小的菱形。
http://www.lryc.cn/news/603076.html

相关文章:

  • 一个Pycharm窗口添加多个项目来满足运行多个项目的需求
  • DDoS攻击防御:从5G到T级防护方案全对比
  • 企业级日志分析系统ELK
  • Python动态规划:从基础到高阶优化的全面指南(3)
  • 历史版本的vscode下载地址
  • 实验-静态路由
  • 智慧工地系统:科技赋能建筑新未来
  • 学习dify:一个开源的 LLM 应用开发平台
  • 【GitHub Workflows 基础(二)】深入理解 on、jobs、steps 的核心语法与执行逻辑
  • 【2025/07/28】GitHub 今日热门项目
  • 【iOS】类和分类的加载过程
  • LNMP架构+wordpress实现动静分离
  • Cacti RCE漏洞复现
  • 四、计算机组成原理——第1章:计算机系统概述
  • 可扩展架构模式——微服务架构最佳实践应该如何去做(方法篇)
  • 《汇编语言:基于X86处理器》第10章 结构和宏(2)
  • linux命令grep的实际应用
  • 在虚拟机ubuntu上修改framebuffer桌面不能显示图像
  • 1.vue体验
  • Android 媒体播放开发完全指南
  • Ansible提权sudo后执行报错
  • 电脑开机不显示网卡的原因
  • selenium 特殊场景处理
  • 刘润探展科大讯飞WAIC,讯飞医疗AI该咋看?
  • CSP-J 2022_第三题逻辑表达式
  • 技术工具箱 |五、一个避免头文件重复引用的 Python 脚本
  • 嵌入式Linux:注册线程清理处理函数
  • Zynq SOC FPGA嵌入式裸机设计和开发教程自学笔记:硬件编程原理、基于SDK库函数编程、软件固化
  • 第五章:进入Redis的Hash核心
  • 设计模式实战:自定义SpringIOC(亲手实践)