题解 | #牛牛的字符菱形#
牛牛的字符菱形
https://www.nowcoder.com/practice/11a5040fa894430f9d25fda1be37ddc8
const rl = require("readline").createInterface({ input: process.stdin }); var iter = rl[Symbol.asyncIterator](); const readline = async () => (await iter.next()).value; void async function () { // Write your code here while (line = await readline()) { let char = line.trim(); // 去掉输入的空格 let n = 5; // 菱形的行数 // 打印上半部分菱形 for (let i = 1; i <= n; i++) { let row = ""; for (let j = 1; j <= n - i; j++) { row += " "; } for (let k = 1; k <= 2 * i - 1; k++) { if (k % 2 === 1) { row += char; } else { row += " "; } } console.log(row); } // 打印下半部分菱形 for (let i = n - 1; i >= 1; i--) { let row = ""; for (let j = 1; j <= n - i; j++) { row += " "; } for (let k = 1; k <= 2 * i - 1; k++) { if (k % 2 === 1) { row += char; } else { row += " "; } } console.log(row); } } }();
使用两个嵌套的for循环来控制每一行的输出。
外层循环控制行数,内层循环控制每一行的字符和空格的输出。
通过条件判断,判断每一个位置应该输出字符还是空格,从而实现菱形的打印效果。
使用循环和条件判断解决
啊!!!!这个画不出啊
得按这个思路来
“可以通过for循环解决该类打印问题:
字符菱形可以被视作是上三角加上最中间的一行以及下三角三个部分,分开打印完成。
即学会了打印金字塔即可学会打印菱形。
首先菱形一般都为奇数层,即一共有奇数行。
首先需要判断上三角有多少行,我们可以通过枚举判断:5层上三角2行,中间一行,下三角2行。七层上三角3行,中间一行,下三角3行,即(总行数n)/2,总行数同时也是中间行的字符个数。
得到了上三角的行数之后确定了第一个for循环的次数即为n/2
然后判断上三角的字符如何打印:若总行数为5,第一行打印两个空格,再打印一个字符,若总行数为7,第一行打印三个空格,再打印三个个字符,得出结论:空格数即为上三角的行数,且随行递减。而字符数则是2*第几行 -1,即2*i -1
中间行直接打印n个字符即可
下三角可以认为是上三角的对称图形,以n=5为例,第四行即是第二行,第五行即是第一行,只需要将第一个for循环改成--模式即可。” 这个是题解里面大佬写的 这个思路才对