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

题目描述

在 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 
#include 
#include 

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 
#include 
#include 

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;
}

你可能感兴趣的:(算法,蓝桥杯,c++,职场和发展)