字母金字塔
给出一个英文大写字母 C。
输出从 A 到 C 共 k + 1 行的字母金字塔(k 是 C 在 A 之后第几个字母,A 时为 0)。
从上往下第 i 行(从 0 数)是 k - i 个空格,接着从 A 依次到 A 之后第 i 个字母,再从它前一个字母倒着回到 A。
例如 C = D 时最后一行是 "ABCDCBA"。
行末不要加空格。
- 输入
- C 是 A 到 Z 之间的一个大写字母
- 输出
- k + 1 行的金字塔
D
A ABA ABCBA ABCDCBA
A
A
给出一个英文大写字母 C。
输出从 A 到 C 共 k + 1 行的字母金字塔(k 是 C 在 A 之后第几个字母,A 时为 0)。
从上往下第 i 行(从 0 数)是 k - i 个空格,接着从 A 依次到 A 之后第 i 个字母,再从它前一个字母倒着回到 A。
例如 C = D 时最后一行是 "ABCDCBA"。
行末不要加空格。
D
A ABA ABCBA ABCDCBA
A
A
运行时这些行会依次作为 input()/标准输入传入(运行中不会等待输入)。
$ 就绪
请在电脑上打开以编写和运行代码。在手机上可以查看题目和题解。
把字母变成数字相加再变回字母,方法因语言而异:Python chr(ord("A") + j),JS/TS String.fromCharCode(65 + j)。
在 JS 中 "A" + 1 不是计算而是字符串拼接,结果是 "A1"。
在 C、C++、Java、C# 中 'A' + j 是 int。
C 的 putchar 会把 int 当字符输出,但 C++ cout << 'A' + j 和 Java StringBuilder.append('A' + j) 会输出 65 这样的数字,要用 (char) 或 static_cast<char> 转回来。
重复同一字符的方法也不同:Python " " * n,JS/TS/Java(11 起)" ".repeat(n),C# new string(' ', n),C++ std::string(n, ' ')。
C 没有重复函数,可以用循环,或用 printf("%*s", n, "") 输出相应宽度的空格。
Craykon 用 字符.编码("A") 得到数字,用 字符.从编码(a + j) 转回,空格用 " ".重复(k - i) 生成。
k = ord(input().strip()) - ord("A")for i in range(k + 1): up = "".join(chr(ord("A") + j) for j in range(i + 1)) # 올라간 글자 + 마지막 글자를 뺀 거꾸로 print(" " * (k - i) + up + up[-2::-1])const k = require("fs").readFileSync(0, "utf8").trim().charCodeAt(0) - 65;const lines = [];for (let i = 0; i <= k; i++) { let up = ""; for (let j = 0; j <= i; j++) up += String.fromCharCode(65 + j); const down = up.slice(0, -1).split("").reverse().join(""); lines.push(" ".repeat(k - i) + up + down);}console.log(lines.join("\n"));import { readFileSync } from "node:fs";const k: number = readFileSync(0, "utf8").trim().charCodeAt(0) - 65;const lines: string[] = [];for (let i = 0; i <= k; i++) { let up = ""; for (let j = 0; j <= i; j++) up += String.fromCharCode(65 + j); const down: string = up.slice(0, -1).split("").reverse().join(""); lines.push(" ".repeat(k - i) + up + down);}console.log(lines.join("\n"));import java.util.Scanner; public class Main { public static void main(String[] args) { int k = new Scanner(System.in).next().charAt(0) - 'A'; StringBuilder out = new StringBuilder(); for (int i = 0; i <= k; i++) { out.append(" ".repeat(k - i)); // 'A' + j 는 int라서 (char)로 되돌려야 글자로 붙는다 for (int j = 0; j <= i; j++) out.append((char) ('A' + j)); for (int j = i - 1; j >= 0; j--) out.append((char) ('A' + j)); out.append('\n'); } System.out.print(out); }}using System;using System.Text; class Program{ static void Main() { int k = Console.ReadLine().Trim()[0] - 'A'; var output = new StringBuilder(); for (int i = 0; i <= k; i++) { output.Append(new string(' ', k - i)); // 'A' + j 는 int라서 (char)로 되돌려야 글자로 붙는다 for (int j = 0; j <= i; j++) output.Append((char)('A' + j)); for (int j = i - 1; j >= 0; j--) output.Append((char)('A' + j)); output.Append('\n'); } Console.Write(output); }}#include <iostream>#include <string> int main() { char c; std::cin >> c; int k = c - 'A'; for (int i = 0; i <= k; i++) { std::string line(k - i, ' '); // 'A' + j 는 int라서 char로 되돌려 붙인다 for (int j = 0; j <= i; j++) line += static_cast<char>('A' + j); for (int j = i - 1; j >= 0; j--) line += static_cast<char>('A' + j); std::cout << line << '\n'; }}#include <stdio.h> int main(void) { char c; scanf(" %c", &c); int k = c - 'A'; for (int i = 0; i <= k; i++) { // C에는 되풀이 함수가 없다: %*s 에 빈 문자열을 주면 그 너비만큼 빈칸이 찍힌다 printf("%*s", k - i, ""); for (int j = 0; j <= i; j++) putchar('A' + j); for (int j = i - 1; j >= 0; j--) putchar('A' + j); putchar('\n'); } return 0;}a = 字符.编码("A");k = 字符.编码(控制台.读行().去空白()) - a;循环 (i = 0; i <= k; i++){ line = " ".重复(k - i); 循环 (j = 0; j <= i; j++) { line += 字符.从编码(a + j); } 循环 (j = i - 1; j >= 0; j--) { line += 字符.从编码(a + j); } 控制台.输出(line);}