名字右对齐
第一行给出名字个数 n,接下来 n 行每行一个英文名字。
以最长名字的长度为宽度,把所有名字在该宽度内右对齐,按输入顺序每行输出一个。
右对齐是指在名字前面(左边)补空格,使长度等于宽度。
最长的名字原样输出,不加空格。
- 输入
- 1 ≤ n ≤ 100。
名字只含英文大小写字母,长度 1 到 20 - 输出
- n 行,每行是左侧补空格到宽度的名字
3 Ann Maximilian Jo
Ann
Maximilian
Jo
第一行给出名字个数 n,接下来 n 行每行一个英文名字。
以最长名字的长度为宽度,把所有名字在该宽度内右对齐,按输入顺序每行输出一个。
右对齐是指在名字前面(左边)补空格,使长度等于宽度。
最长的名字原样输出,不加空格。
3 Ann Maximilian Jo
Ann
Maximilian
Jo
运行时这些行会依次作为 input()/标准输入传入(运行中不会等待输入)。
$ 就绪
请在电脑上打开以编写和运行代码。在手机上可以查看题目和题解。
在左边补空格的函数:Python s.rjust(w),JS/TS s.padStart(w),C# s.PadLeft(w),Java String.format("%" + w + "s", s),C printf("%*s", w, s)(宽度作为参数传入),C++ std::setw(w)。
Craykon s.左填充(w)(与 C# 的 PadLeft 相同;"7".左填充(3, "0") 得到 007)。
左对齐的版本名字很像(Python ljust、C %-*s),容易搞混。
陷阱:要读完所有名字才知道宽度。
边读边输出只会对齐到目前为止的最大宽度;把宽度固定为最大长度 20 也是错的。
n = int(input())names = [input().strip() for _ in range(n)]width = max(len(name) for name in names)for name in names: print(name.rjust(width))const [first, ...rest] = require("fs").readFileSync(0, "utf8").split("\n");const names = rest.slice(0, Number(first)).map((s) => s.trim());const width = Math.max(...names.map((s) => s.length));console.log(names.map((s) => s.padStart(width)).join("\n"));import { readFileSync } from "node:fs";const [first, ...rest]: string[] = readFileSync(0, "utf8").split("\n");const names: string[] = rest.slice(0, Number(first)).map((s) => s.trim());const width: number = Math.max(...names.map((s) => s.length));console.log(names.map((s) => s.padStart(width)).join("\n"));import java.io.BufferedReader;import java.io.InputStreamReader; public class Main { public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); int n = Integer.parseInt(br.readLine().trim()); String[] names = new String[n]; int width = 0; for (int i = 0; i < n; i++) { names[i] = br.readLine().trim(); width = Math.max(width, names[i].length()); } StringBuilder out = new StringBuilder(); for (String name : names) out.append(String.format("%" + width + "s", name)).append('\n'); System.out.print(out); }}using System;using System.Linq; class Program{ static void Main() { int n = int.Parse(Console.ReadLine()); string[] names = new string[n]; for (int i = 0; i < n; i++) names[i] = Console.ReadLine().Trim(); int width = names.Max(s => s.Length); foreach (string name in names) Console.WriteLine(name.PadLeft(width)); }}#include <algorithm>#include <iomanip>#include <iostream>#include <string>#include <vector> int main() { int n; std::cin >> n; std::vector<std::string> names(n); size_t width = 0; for (auto& name : names) { std::cin >> name; width = std::max(width, name.size()); } for (const auto& name : names) std::cout << std::setw(static_cast<int>(width)) << name << "\n";}#include <stdio.h>#include <string.h> int main(void) { int n, width = 0; char names[100][21]; if (scanf("%d", &n) != 1) return 0; for (int i = 0; i < n; i++) { scanf("%20s", names[i]); int len = (int)strlen(names[i]); if (len > width) width = len; } for (int i = 0; i < n; i++) printf("%*s\n", width, names[i]); return 0;}n = 控制台.读行().转数字();names = [];width = 0;循环 (i = 0; i < n; i++){ name = 控制台.读行().去空白(); names.添加(name); width = 数学.较大值(width, name.长度);}遍历 (name 在 names){ 控制台.输出(name.左填充(width));}