1、问题描述

在 ISO 国际标准中定义了 A0 纸张的大小为 1189mm ×× 841mm, 将 A0 纸 沿长边对折后为 A1 纸, 大小为 841mm ×× 594mm, 在对折的过程中长度直接取 下整 (实际裁剪时可能有损耗)。将 A1 纸沿长边对折后为 A2 纸, 依此类推。

输入纸张的名称, 请输出纸张的大小。

2、输入格式

输入一行包含一个字符串表示纸张的名称, 该名称一定是 A0、A1、A2、 A3、A4、A5、A6、A7、A8、A9 之一。

3、输出格式

输出两行,每行包含一个整数,依次表示长边和短边的长度。

4、样例输入和输出

样例输入1

A0

样例输出1

1189
841

样例输入 2

A1

样例输出 2

841
594

5、解题思路

A0对折0此,A1对折1此,每次A后面的数字就是我们对折的次数,可以当作循环的判断条件。

这个题感觉太简单了,就纸张有长边longSide和短边shortSide,每次沿着长边对折,那么长边的边长减半就行,但是每次对折之后需要将长边和短边的长度进行比较,将数值较大的赋值为longSide,将数值较小的赋值给shortSide

题目要求先输出长边再输出短边,其实这里都可以不用管,最后结果将longSideshortSide中较大的先输出、较小的后输出就行。

6、代码实现

public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        String s = scan.next();
        int n = Integer.parseInt(String.valueOf(s.charAt(1)));
        int a = 1189;
        int b = 841;
        if (n == 0) {
            System.out.println(a);
            System.out.println(b);
        } else {
            int longSide = Math.max(a, b); //长边
            int shortSide = Math.min(a, b);//短边
            for (int i = 0; i < n; i++) {
                if (longSide < shortSide) {
                    int temp = longSide;
                    longSide = shortSide;
                    shortSide = temp;
                }
                longSide /= 2;
            }
            System.out.println(Math.max(longSide, shortSide));
            System.out.println(Math.min(longSide, shortSide));
        }
        scan.close();
    }

运行结果如下:

image-20230226194132197