纸条上写着 n 个单词,每行一个。 从第一个单词取第一个字母,从第二个单词取第二个字母,依此类推,从第 i 个单词取第 i 个字母。 如果第 i 个单词的长度比 i 短,没有字母可取,就写 * 代替字母。 第一行给出 n,接下来 n 行每行给出一个单词。 把这样得到的 n 个字符从第一个单词的开始依次连在一起,中间不加空格,输出为一行。
输入
1 ≤ n ≤ 100,单词是只含小写英文字母、长度 1 到 100 的字符串
输出
一行,n 个字符的字符串(小写英文字母和 *)
样例 1 · stdin
4
cat
bone
do
gold
stdout
co*d
main.py
错误列表00F8 ↓ · ⇧F8 ↑
输入(stdin)
运行时这些行会依次作为 input()/标准输入传入(运行中不会等待输入)。
$ 就绪
请在电脑上打开以编写和运行代码。在手机上可以查看题目和题解。
其他语言怎么写?查看各语言题解 · 8 种语言题解
8 种语言的字符下标都从 0 开始。 所以让循环变量 i 从 0 开始,就从第 i 号(按人的数法是第 i + 1 个)单词取 word[i],能用的下标是 0 到 长度 - 1。 取字符:Python、JS、TS、C#、C、C++、Craykon 用 word[i],Java 用 word.charAt(i)。 长度:Python len(word),JS、TS word.length,Java word.length(),C# word.Length,C++ word.size(),C strlen(word),Craykon word.长度。 读取越界下标时发生的事情,各语言差别很大。 Python 因 IndexError、Java 因 StringIndexOutOfBoundsException、C# 因 IndexOutOfRangeException 停止,Craykon 也会提示字符串只有 0 到 2 号并停止。 JS、TS 的 word[i] 不会停止,而是给出 undefined,于是答案里多出 "undefined" 这几个字(word.charAt(i) 是空字符串)。 C 不做检查,直接交出数组里前一个单词留下的字母或结束标记 \0。 C++ 的 word[i] 也不检查,用 word.at(i) 才会抛出 std::out_of_range。 所以取之前要先问 i < 长度。 两个陷阱:① 写成 i <= 长度,遇到长度恰好为 i 的单词就越界了。 ② 把人数的序号(从 1 开始)直接用在 word[i] 上,取到的是后一个位置的字母。
Pythonmain.py · 9 行
n = int(input())answer = ""for i in range(n): word = input().strip() if i < len(word): # 번호는 0부터라서 i째 낱말의 글자 번호는 0 ~ len - 1 answer += word[i] else: answer += "*"print(answer)
JavaScriptmain.js · 9 行
const lines = require("fs").readFileSync(0, "utf8").split("\n");const n = Number(lines[0]);let answer = "";for (let i = 0; i < n; i++) { const word = lines[i + 1].trim(); // 번호는 0부터라서 쓸 수 있는 글자 번호는 0 ~ length - 1 answer += i < word.length ? word[i] : "*";}console.log(answer);
TypeScriptmain.ts · 10 行
import { readFileSync } from "node:fs";const lines: string[] = readFileSync(0, "utf8").split("\n");const n: number = Number(lines[0]);let answer = "";for (let i = 0; i < n; i++) { const word: string = lines[i + 1].trim(); // 번호는 0부터라서 쓸 수 있는 글자 번호는 0 ~ length - 1 answer += i < word.length ? word[i] : "*";}console.log(answer);
JavaMain.java · 17 行
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;public class Main { public static void main(String[] args) throws IOException { BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(in.readLine().trim()); StringBuilder answer = new StringBuilder(); for (int i = 0; i < n; i++) { String word = in.readLine().trim(); // 번호는 0부터라서 쓸 수 있는 글자 번호는 0 ~ length() - 1 answer.append(i < word.length() ? word.charAt(i) : '*'); } System.out.println(answer); }}
C#Main.cs · 18 行
using System;using System.Text;class Program{ static void Main() { int n = int.Parse(Console.ReadLine()); var answer = new StringBuilder(); for (int i = 0; i < n; i++) { string word = Console.ReadLine().Trim(); // 번호는 0부터라서 쓸 수 있는 글자 번호는 0 ~ Length - 1 answer.Append(i < word.Length ? word[i] : '*'); } Console.WriteLine(answer); }}
C++main.cpp · 16 行
#include <iostream>#include <string>int main() { int n; std::cin >> n; std::string answer; for (int i = 0; i < n; i++) { std::string word; std::cin >> word; // 번호는 0부터라서 쓸 수 있는 글자 번호는 0 ~ size() - 1 if (i < static_cast<int>(word.size())) answer += word[i]; else answer += '*'; } std::cout << answer << '\n';}
Cmain.c · 16 行
#include <stdio.h>#include <string.h>int main(void) { int n; if (scanf("%d", &n) != 1) return 0; char word[101]; for (int i = 0; i < n; i++) { if (scanf("%100s", word) != 1) return 0; // C는 범위를 검사해 주지 않으니 길이를 직접 물어야 한다 if (i < (int)strlen(word)) putchar(word[i]); else putchar('*'); } putchar('\n'); return 0;}
Craykonmain.cray · 16 行
n = 控制台.读行().转数字();answer = "";循环 (i = 0; i < n; i++){ word = 控制台.读行().去空白(); // 번호는 0부터라서 쓸 수 있는 글자 번호는 0 ~ 길이 - 1 如果 (i < word.长度) { answer += word[i]; } 否则 { answer += "*"; }}控制台.输出(answer);