一、题目
1、原题链接
4652. 纸张尺寸 - AcWing题库
2、题目描述
在 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
二、解题报告
1、思路分析
1)因为只有九种情况,所以而且每个输入样例都是以A开头,所以定义一个字符变量就行,没必要弄成字符串,以免后续还需将字符串转为整型。
2)因为是向下取整,所以正好符合整型数据的除法,综上,为输入的字符A定义一个字符变量,来存它的值,为输入的数字定义一个整型变量,来存它的值。
3)由题意可知推出,A几就将A0折叠几次。
4)每次都是折叠最长边,所以,每次折叠完以后,要始终存长边的变量存成两个值中的较大的值。
5)结束循环后,输出长边和短边。
2、时间复杂度
时间复杂度为O(n)
3、代码详解
#include <iostream>
using namespace std;
int main()
{ char A;
int num;
cin>>A>>num;
int l=1189,w=841;
for(int i=0;i<num;i++){
l/=2;
if(l<w){
swap(l,w);
}
}
cout<<l<<endl<<w;
return 0;
}