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
望采纳!!!