问题标题: 酷町堂:3053

0
0
已解决
周旭东
周旭东
初级光能
初级光能

题目描述 Description

小明的爸爸买了一辆除草机准备除去自己家长为X宽为Y的矩形田里的杂草,但是由于除草机能力有限,每次只能除去一块正方形的小区域,而且每次消耗的柴油量是正方形的周长,请问最少要多少的柴油才能将这块田里的杂草除完。

输入描述 Input Description

两个正整数x,y,表示田的长和宽。

输出描述 Output Description

输出最小消耗的柴油量。

样例输入 Sample Input

 

输入样例1:
1 10

输入样例2:
2 2

样例输出 Sample Output

 

输出样例1:
40

输出样例2:
8

数据范围及提示 Data Size & Hint

1<=x,y<=10^16


0
已采纳
童梦圆
童梦圆
资深守护
资深守护

方法1: 

long long int x,y,s=0;//x长,y宽 

 

  while(x!=0&&y!=0)//就是一个数学迭代,像gcd的辗转相除法 
    {//如果为0就结束了 
        swap(x,y);//交换x,y 
        s=s+4*y*(x/y);//长方形剩下的所有最大正方形 ,
        //4*y:单个正方形的周长,x/y:一共有几个正方形 
        x=x%y; //取多个(x/y)最大正方形后剩余的长度 ,最小的锄头1*1 
        cout<<s<<endl; 
    }//每次删除最大的正方形(即长度为x的正方形),直到y比x,也就是不能再删除一个长度为x的正方形了

方法2:

long long x,y,h=0;
while(x!=0&&y!=0)
    {
        if(x<y)
        {
            h=h+x*4;
            y=y-x;
        }
        else
        {
            h=h+y*4;
            x=x-y;
        }
    } 

方法3:

long long x,y,h=0;
while(x!=y)
    {
        if(x<y)
        {
            h=h+x*4;
            y=y-x;
        }
        else
        {
            h=h+y*4;
            x=x-y;
        }
    } 
    h=h+4*x;

任选一种,每种加上输入输出都是AC

 

望采纳!!!

我要回答