【蓝桥杯】第十三届省赛-纸张尺寸

题目描述

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

A 1 A1 A1 纸沿长边对折后为 A 2 A2 A2 纸,依此类推。

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

输入格式

输入一行包含一个字符串表示纸张的名称,该名称一定是 A 0 、 A 1 、 A 2 、 A 3 、 A 4 、 A 5 、 A 6 、 A 7 、 A 8 、 A 9 A0、A1、A2、A3、A4、A5、A6、A7、A8、A9 A0A1A2A3A4A5A6A7A8A9之一。

输出格式

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

输入样例1:
A0
输出样例1:
1189
841
输入样例2:
A1
输出样例2:
841
594
思路

长边为上一个标准的短边,短边为上一个标准的长边向下取整, 整除2即可。

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;

int main()
{
    int l = 1189, s = 841;
    string op;
    cin >> op;
    int a = op[1] - '0';//记录当前输入的纸张名称需要将A0对折几次。 
    for(int i = 1; i <= a; i++)
    {
        int t = l;
        l = s;
        s = t / 2;
    }
    cout << l << endl << s << endl;
    
    return 0;
}
傻傻的思路:

想法是算出 A 0 ∼ A 9 A0 \sim A9 A0A9 的尺寸存入数组,然后查询即可。但忘了取下整就是整除2,太笨了我。具体地就是将上一个标准的长度,从2开始取余,当找到的第一个余数为0或1的话,再整除它就是新的短边( 这不是就是整除2吗,太傻了)。

#include <iostream>
#include <cstring>
#include <algorithm>

using namespace std;
//存A0 ~ A9 的尺寸
struct paper
{
    int l, s;
}a[10];

int solve(int s)
{
    for(int i = 2; i <= s; i++)
    {
        if(s % i == 1 || s % i == 0) return s / i;
    }
}
int main()
{
    a[0].l = 1189, a[0].s = 841;
    char op[2];
    cin >> op;
    for(int i = 1; i < 10; i++)
    {
        a[i].l = a[i-1].s;
        a[i].s = solve(a[i-1].l);
    }
    if(op[1] == '0') cout << a[0].l << endl << a[0].s;
    if(op[1] == '1') cout << a[1].l << endl << a[1].s;
    if(op[1] == '2') cout << a[2].l << endl << a[2].s;
    if(op[1] == '3') cout << a[3].l << endl << a[3].s;
    if(op[1] == '4') cout << a[4].l << endl << a[4].s;
    if(op[1] == '5') cout << a[5].l << endl << a[5].s;
    if(op[1] == '6') cout << a[6].l << endl << a[6].s;
    if(op[1] == '7') cout << a[7].l << endl << a[7].s;
    if(op[1] == '8') cout << a[8].l << endl << a[8].s;
    if(op[1] == '9') cout << a[9].l << endl << a[9].s;
    
    return 0;
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值