英大文字一つ C が与えられる。 A から C までの k + 1 行(k は C が A から何文字後ろか。 A なら 0)の文字のピラミッドを出力せよ。 上から i 行目(0 から)は空白 k - i 個、続いて A から A の i 文字後ろの文字まで順に、続いてそのすぐ前の文字から逆に A までである。 例えば C = D なら最後の行は "ABCDCBA" である。 行末には空白を入れない。
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])
JavaScriptmain.js · 9 行
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"));
TypeScriptmain.ts · 10 行
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"));
JavaMain.java · 16 行
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); }}
C#Main.cs · 20 行
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); }}
C++main.cpp · 15 行
#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'; }}
Cmain.c · 15 行
#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;}
Craykonmain.cray · 15 行
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);}