蓝桥杯纸张尺寸

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

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

输入格式

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

输出格式

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

样例输入1

A0

样例输出1

1189
841

样例输入 2

A1

样例输出 2

841
594

作者首先想到的就是利用switch解决这个问题,当然有其他很多的方法,但是这里就用switch尝试解决。

考虑到switch无法识别string类型,作者将每一个case的条件改成了‘A0’、‘A1’......‘A9’,试图将字符串转化成数字,但是结果并没有如我所愿。

于是在请教同学后想到了可以只识别‘A0’、‘A1’......‘A9’后面的0、1......9来解决问题。由于正好是字符串的第二位元素,可以直接用a[1]来进行索引,完整代码如下:

#include <iostream>
#include<algorithm>
#include<string>
using namespace std;

int main()
{
    string a;
    cin >> a; //输入纸张规格A0~A9
    int length[10], wide[10]; 
    //A0规格的纸张为1189mm*841mm
    length[0] = 1189;
    wide[0] = 841;
    for (int i = 1; i < 10; i++) 
    {
        //对长和宽进行赋值,但并不一定长比宽数值大,所以后面输出需进一步筛选
        length[i] = (length[i-1]>wide[i-1]?wide[i-1]:length[i-1]);
        wide[i] = (length[i-1]>wide[i-1]?(length[i-1]/2):(wide[i-1]/2));
    }
    switch (a[1])  
    {
    case '0': 
        cout << max(length[0],wide[0]) << endl;
        cout << min(length[0],wide[0]) << endl;
        break;
    case '1':
        cout << max(length[1], wide[1]) << endl;
        cout << min(length[1], wide[1]) << endl;
        break;
    case '2':
        cout << max(length[2], wide[2]) << endl;
        cout << min(length[2], wide[2]) << endl;
        break;
    case '3':
        cout << max(length[3], wide[3]) << endl;
        cout << min(length[3], wide[3]) << endl;
        break;
    case '4':
        cout << max(length[4], wide[4]) << endl;
        cout << min(length[4], wide[4]) << endl;
        break;
    case '5':
        cout << max(length[5], wide[5]) << endl;
        cout << min(length[5], wide[5]) << endl;
        break;
    case '6':
        cout << max(length[6], wide[6]) << endl;
        cout << min(length[6], wide[6]) << endl;
        break;
    case '7':
        cout << max(length[7], wide[7]) << endl;
        cout << min(length[7], wide[7]) << endl;
        break;
    case '8':
        cout << max(length[8], wide[8]) << endl;
        cout << min(length[8], wide[8]) << endl;
        break;
    case '9':
        cout << max(length[9], wide[9]) << endl;
        cout << min(length[9], wide[9]) << endl;
        break;
    default:
        break;
    }
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ricardo_yanwu

发博客也就图一乐学到知识最重要

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值