您的位置:首页 > 其它

庞果网--理想随机数发生器

2013-11-30 17:33 232 查看
根据题意:分类讨论就行

转换提意:把a当做x轴,b当做y轴,那么题意就是求图中红线与坐标轴所围成的三角形面积设为s1,ab所构成的黑色矩形的面积为s2,那么题意就是求图中的***区域与s2的面积之比。

此时怎样求图中的***面积是重点,由于a、b、c的关系不确定,那么分类就行

对于那种显而易见的答案,就如说a+b<=c此时就是1/1

由于题意要求求最简分数,那么就要求求面积的最大公约数gcd----欧几里得算法来求-----辗转相除法也行

对于题目中c++给定的函数返回值是string,就通过字符串流来解决

http://hi.baidu.com/5053738058/item/0c0779074255c816addc701b

class Test {
public:
	static int gcd(int a,int b)
	{
		return b==0?a:gcd(b,a%b);
	}
    static string calculate (int   a,int   b,int   c)
    {
        int r;
        int s1,s2=2*a*b;
        if(a+b<=c)return "1/1";
        else if(c<=a)
        {
            if(c<=b)
            {
                s1=c*c;
                r=gcd(s1,s2);
                s1=s1/r;
                s2=s2/r;
            }
            else
            {
                s1=c*c-(c-b)*(c-b);
                r=gcd(s1,s2);
                s1=s1/r;
                s2=s2/r;
            }
        }
        else
        {
            if(c<=b)
            {
                s1=c*c-(c-a)*(c-a);
                r=gcd(s1,s2);
                s1=s1/r;
                s2=s2/r;
            }
            else
            {
                s1=c*c-(c-b)*(c-b)-(c-a)*(c-a);
                r=gcd(s1,s2);
                s1=s1/r;
                s2=s2/r;
            }
        }
        std::stringstream ss;
        ss<<s1<<"/"<<s2;
        std::string ret=ss.str();
        return ret;
    }
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: