商贸公司寮步网站建设极致发烧,企业做网站需要做哪些工作,网站建设选超速云建站,软件商店2023每日一道C题#xff1a;字符菱形
问题#xff1a;给定一个字符#xff0c;用它构造一个对角线长5个字符#xff0c;倾斜放置的菱形。
要求#xff1a;输入只有一行#xff0c; 包含一个字符#xff1b;输出该字符构成的菱形。
最基础的做法#xff1a;
#include io…每日一道C题字符菱形
问题给定一个字符用它构造一个对角线长5个字符倾斜放置的菱形。
要求输入只有一行 包含一个字符输出该字符构成的菱形。
最基础的做法
#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;
}循环嵌套
菱形规律
菱形的行数为 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 。
知识扩展
菱形的一般规律
对于对角线长度为 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 。
字符和字符串输出
本题中只输出单个字符所以使用 cout ch; 。如果需要输出字符串可以使用 cout “string”; 或者结合字符数组等方式。
扩展到任意大小的菱形
可以将代码中的 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 程序可以生成不同大小的菱形。