L1-015 跟奥巴马一起画方块(15分)[java][python]

4 阅读2分钟

题目编号:L1-015
分数:15分
语言:Java、Python

题目描述

美国总统奥巴马不仅呼吁所有人都学习编程,甚至以身作则编写代码,成为美国历史上首位编写计算机代码的总统。2014年底,为庆祝"计算机科学教育周"正式启动,奥巴马编写了很简单的计算机代码:在屏幕上画一个正方形。现在你也跟他一起画吧!

输入格式

输入在一行中给出正方形边长 N(3 ≤ N ≤ 20)和组成正方形边的某种字符 C,间隔一个空格。

输出格式

输出由给定字符 C 画出的正方形。但是注意到行间距比列间距大,所以为了让结果看上去更像正方形,我们输出的行数实际上是列数的 50%(四舍五入取整)。

输入样例

10 *

输出样例

**********
**********
**********
**********
**********

解题思路

输入边长 N 和字符 C,输出的行数为 round(N * 0.5),每行输出 N 个字符 C。

关键点:

  • 行数 = N / 2 四舍五入取整,即 (N + 1) / 2(整数除法)
  • 每行输出 N 个字符 C
  • Python 的 round() 函数进行四舍五入

代码实现

Java 实现

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        char c = sc.next().charAt(0);
        
        int rows = (n + 1) / 2;  // 四舍五入
        String line = String.valueOf(c).repeat(n);
        
        for (int i = 0; i < rows; i++) {
            System.out.println(line);
        }
    }
}

Python 实现

line = input().split()
n = int(line[0])
c = line[1]

rows = round(n * 0.5)
for _ in range(rows):
    print(c * n)

运行验证

输入:

10 *

行数 = round(10 * 0.5) = 5,每行 10 个 *

Java / Python 输出:

**********
**********
**********
**********
**********

与样例一致,通过验证。

复杂度分析

  • 时间复杂度:O(N²),输出每行字符
  • 空间复杂度:O(N),每行字符串长度为 N

总结

本题是字符图形输出题,核心在于理解行数的计算方式:行数为列数的 50% 四舍五入取整。Python 中 round(n * 0.5) 即可完成,Java 中可用 (n + 1) / 2 整数除法实现四舍五入效果。