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
", m / n);
        return 0;
    }
    if (m == 1)
    {
        printf("%lld
", 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
", ans);
    }

    return 0;
}

 

原文地址:https://www.cnblogs.com/zbtrs/p/7586467.html