目录

一、题目

1、原题链接

2、题目描述

二、解题报告

1、思路分析

2、时间复杂度

3、代码详解 


一、题目

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【寒假每日一题】AcWing 4652. 纸张尺寸_字符串



输出样例1:



1189 841【寒假每日一题】AcWing 4652. 纸张尺寸_时间复杂度_02



输入样例2:



A1【寒假每日一题】AcWing 4652. 纸张尺寸_字符串_03



输出样例2:



841 594【寒假每日一题】AcWing 4652. 纸张尺寸_时间复杂度_04


二、解题报告

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

【寒假每日一题】AcWing 4652. 纸张尺寸_时间复杂度_05