给矩形面积求周长最小

一个矩形的面积为S,已知该矩形的边长都是整数,求所有满足条件的矩形中,周长的最小值。例如:S = 24,那么有{1 24} {2 12} {3 8} {4 6}这4种矩形,其中{4 6}的周长最小,为20。

Input
输入1个数S(1 <= S <= 10^9)。
Output
输出最小周长。
Sample Input
24
Sample Output
20
这道题刚开始憨憨的没管时间用两个for去干被爆TLE,但后来发现是高中学的一个均值不等式,给定一个面积去求周长的最小值,可以用ab≤(a+b)2/4,用这个不等式当a=b的时候等号成立,所以当测试数据不是完全平方数的时候就应该是a,b最接近的时候取得周长的最小值,所以可以将长从面积的大小开始使用宽=面积/长,来算,一旦宽≥长的时候就是我需要的最小周长,此时即可break,结束循环

代码

#include<iostream>
using namespace std;
int main()
{
     int s;
     cin>>s;
     int a,b;//长为a,宽为b
     for(b=1;b<s;b++)//宽度从1开始递增
     {
         a=s/b;
         if(s==a*b&&b>=a)//此处需要特判,不然如果s/b是浮点型,给a就会使整型而出错
         {
             break;
         }
     }
     cout<<2*(a+b)<<endl;
    return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值