原题地址:https://ac.nowcoder.com/acm/contest/18839/1039

题目描述

给出共享长方体一个顶点的三个面的面积,
求它十二条边的边长和。

输入描述:

一行三个整数 a, b, c表示面积(1 <= a, b, c <= 10000)。

输出描述:

一行一个整数表示边长和。

示例1

输入
1 1 1

输出
12


今日首崩!图片说明

真是被这题卡了好久,就差用枚举法找边长解题了(无能狂怒了属于是图片说明 ),仔细分析变量后却不难发现这只是一道数学题...

审题,需将长方体面积转化为边长。为了便于解题,先将长方体三边设为xyz
从答案逆推,边长和=4*(x+y+z),即求(x+y+z)
而a=xy,b=yz,c=zx
不难想到我们高中学过的三数和平方公式:(x+y+z)^2=x^2+y^2+z^2+2xy+2yz+2zx
可以发现xy+yz+zx就等于a+b+c
而平方可以由齐次式组合相除得到(这点很难想到):x^2=(xy*zx)/yz=a*c/b

整理得到 (x+y+z)=sqrt(ab/c+ac/b+bc/a+(a+b+c)*2)

简单糙下代码就AC了图片说明

这是我的代码

#include <stdio.h>
#include <math.h>

int main ()
{
    int a,b,c,ans;
    scanf("%d%d%d",&a,&b,&c);
    ans=4*sqrt(a*b/c+a*c/b+b*c/a+(a+b+c)*2);
    printf("%d\n",ans);

    return 0;
}

注意

调用sqrt()函数前记得包含头文件math.h啊#include <math.h>
ans记得乘4,不要糙半天糙个WA出来图片说明