文字の鎖
英字二つ a と b が空白一つをはさんで一行で与えられる。
二つとも小文字か、二つとも大文字である。
a から b までアルファベット順に一文字ずつ、間に "-" を入れて一行に出力せよ。
a が b より後ろの文字なら逆向きに(b の方へ)進む。
a と b が同じならその一文字だけを書く。
先頭と末尾には "-" を書かない。
- 入力
- a, b:英字一つずつ、大文字小文字は同じ
- 出力
- 文字と "-" からなる一行
c g
c-d-e-f-g
E B
E-D-C-B
英字二つ a と b が空白一つをはさんで一行で与えられる。
二つとも小文字か、二つとも大文字である。
a から b までアルファベット順に一文字ずつ、間に "-" を入れて一行に出力せよ。
a が b より後ろの文字なら逆向きに(b の方へ)進む。
a と b が同じならその一文字だけを書く。
先頭と末尾には "-" を書かない。
c g
c-d-e-f-g
E B
E-D-C-B
実行すると、これらの行が順に input()・標準入力に渡されます(実行中に入力を求めません)。
$ 準備完了
コードを入力して解くにはパソコンで開いてください。モバイルでは問題と解答を見られます。
文字を「数のように」扱う方法は言語ごとに違います。
C の char は小さな整数なので c + 1 がそのまま次の文字で、putchar(c) で出力します。
C++・Java・C# にも文字型がありますが、char + int の結果は int なので、Java System.out.print('c' + 1) と C++ std::cout << 'c' + 1 は "100" を出します — (char)(c + 1) で戻すか、char 変数に入れ直します。
ループ変数を int にしてそのまま出しても "99-100-101" になります。
Python・JS・TS には文字型がなく一文字の文字列だけなので、コードと行き来します:Python ord("a")・chr(97)、JS・TS "a".charCodeAt(0)・String.fromCharCode(97)、Craykon 文字.コード("a")・文字.コードから(97)。
これを忘れると JS の "c" + 1 は黙って "c1" になり、Python は TypeError で止まります。
改行せずに続けて書く:Python print(x, end="")、JS・TS process.stdout.write(console.log は必ず改行します)、Java System.out.print、C# Console.Write、C putchar・printf、C++ std::cout << x、Craykon コンソール.続けて書く。
よくある落とし穴は文字ごとに後ろへ "-" を付けて最後に "-" が一つ残ること — 最初の文字以外の前に付けるか、リストに集めて "-".join・join("-") でつなぎます。
最後の改行一つも忘れずに。
そして a > b の逆向きの場合もあります。
a, b = input().split()# 글자 ↔ 코드: ord("a") == 97, chr(97) == "a"step = 1 if a <= b else -1for code in range(ord(a), ord(b) + step, step): if code != ord(a): print("-", end="") print(chr(code), end="")print()const [a, b] = require("fs").readFileSync(0, "utf8").trim().split(/\s+/);// 글자 ↔ 코드: "a".charCodeAt(0) === 97, String.fromCharCode(97) === "a"const from = a.charCodeAt(0);const to = b.charCodeAt(0);const step = from <= to ? 1 : -1;for (let code = from; code !== to + step; code += step) { if (code !== from) process.stdout.write("-"); process.stdout.write(String.fromCharCode(code));}process.stdout.write("\n");import { readFileSync } from "node:fs";const [a, b]: string[] = readFileSync(0, "utf8").trim().split(/\s+/);// 글자 ↔ 코드: "a".charCodeAt(0) === 97, String.fromCharCode(97) === "a"const from: number = a.charCodeAt(0);const to: number = b.charCodeAt(0);const step: number = from <= to ? 1 : -1;for (let code = from; code !== to + step; code += step) { if (code !== from) process.stdout.write("-"); process.stdout.write(String.fromCharCode(code));}process.stdout.write("\n");import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); char a = sc.next().charAt(0); char b = sc.next().charAt(0); int step = a <= b ? 1 : -1; StringBuilder out = new StringBuilder(); // char + int 는 int 가 되므로 (char)로 되돌린다 for (char c = a; c != b + step; c = (char) (c + step)) { if (c != a) out.append('-'); out.append(c); } System.out.println(out); }}using System; class Program{ static void Main() { string[] parts = Console.ReadLine().Split(' ', StringSplitOptions.RemoveEmptyEntries); char a = parts[0][0]; char b = parts[1][0]; int step = a <= b ? 1 : -1; // char + int 는 int 가 되므로 (char)로 되돌린다 for (char c = a; c != b + step; c = (char)(c + step)) { if (c != a) Console.Write('-'); Console.Write(c); } Console.WriteLine(); }}#include <iostream> int main() { char a, b; std::cin >> a >> b; int step = a <= b ? 1 : -1; // c + step 은 int 라서 char 변수에 다시 담아야 글자로 찍힌다 for (char c = a; c != b + step; c += step) { if (c != a) std::cout << '-'; std::cout << c; } std::cout << '\n';}#include <stdio.h> int main(void) { char a, b; scanf(" %c %c", &a, &b); int step = a <= b ? 1 : -1; /* C의 char는 작은 정수라 c + step 이 곧 다음 글자다 */ for (char c = a; c != b + step; c += step) { if (c != a) putchar('-'); putchar(c); } putchar('\n'); return 0;}글자들 = コンソール.行読み().分ける(" ");처음 = 文字.コード(글자들[0]);끝 = 文字.コード(글자들[1]);걸음 = 1;もし (처음 > 끝){ 걸음 = -1;}코드 = 처음;間 (코드 != 끝 + 걸음){ もし (코드 != 처음) { コンソール.続けて書く("-"); } コンソール.続けて書く(文字.コードから(코드)); 코드 += 걸음;}コンソール.書く("");