[Bnuz OJ]1176 小秋与正方形

 

传送门

问题描述

某天,acm的小秋拿到了一张很大很大的纸。他现在打算把它撕成正方 形。但是他没有任何工具,没有尺子,所以他尝试一种有趣的方法切分矩形。假设这是一个a*b的矩形(a>b),那么小秋会先把矩形的一个角如图所示 折起,这样右边就会形成一个正方形,然后把正方形切割出来,如果还存在长方形,小秋会继续这样把正方形切出来,现在要求你编写程序,输出小秋这样做最终能 得到多少个正方形。

输入要求

输入数据有多组。
每个测试数据占一行,有两个整数a,b分别代表小秋所拿到的纸的长和宽(1 ≤ b < a ≤ 10^12)

输出要求

输出结果,输出占一行。

测试数据示例

输入

2 1
10 7

输出

2
6
 
今天做了一下学校的新生赛题,觉得还是挺好玩的。有一些几何题确实需要思考优化,暴力就会TLE.
首先,假如b是a的因子,即 a%b ==0,那么,不难想,可以知道当前情况下生成的正方形数 a/b 个.
那么当a%b !=0 时,就是说需要减掉一部分的正方形,然后再判断a%b==0,就可以啦。
 
上代码
 
 
 
#include <stdio.h>
long long slove(long long a,long long b){
    long long ret = 0;
    while(a!=b){
      if(a<b){
         int t = b;
         b = a;
         a = t;
        }
        if(a%b==0){
            return ret+(a/b);
        }else{
         ret+=a/b;
            a=a-(b*(a/b));  
        }
    }
    if(a==b) ret++;
    return ret;
}
int main(){
    long long a,b;
    while(scanf("%lld %lld",&a,&b)==2){
        printf("%lld\n",slove(a,b));
    }
    return 0;
}

 

你可能感兴趣的:([Bnuz OJ]1176 小秋与正方形)