noip模拟赛 剪纸

题目描述

小芳有一张n*m的长方形纸片。每次小芳将会从这个纸片里面剪去一个最大的正方形纸片,直到全部剪完(剩下一个正方形)为止。

小芳总共能得到多少片正方形纸片?

输入输出格式

输入格式:

 

一行两个整数nm

 

输出格式:

 

一行一个整数,总共能得到的纸片数量。

 

输入输出样例

输入样例#1:
6 4
输出样例#1:
3

说明

对于30%的数据满足n=1

对于60%的数据满足n,m10^3​​

对于100%的数据满足n,m10​^12​​

分析:一道比较水的题,如果直接按照题目说的来,每次用大的减小的,就有可能出现n = 10^12,m = 1这样的极端情况,为了避免多次相减,使用除法就好了.

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <string>

using namespace std;

long long n, m, ans;

int main()
{
    scanf("%lld%lld", &n, &m);
    if (n == 1)
    {
        printf("%lld\n", m / n);
        return 0;
    }
    if (m == 1)
    {
        printf("%lld\n", n / m);
        return 0;
    }
    else
    {
        while (m != 0 && n != 0)
        {
            if (m > n)
            {
                long long t = m / n;
                ans += t;
                m -= t * n;
            }
            else
            if (n > m)
            {
                long long t = n / m;
                ans += t;
                n -= t * m;
            }
        }
        printf("%lld\n", ans);
    }

    return 0;
}

 

 

posted @ 2017-09-24 10:21  zbtrs  阅读(299)  评论(0编辑  收藏  举报