最小周长

来源:互联网 发布:中美大单 知乎 编辑:程序博客网 时间:2024/05/17 06:44

题目描述

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

输入

输入1个数S(1 <= S <= 10^9)。

输出

输入1个数S(1 <= S <= 10^9)。

样例输入

24

样例输出

20

提示

解题思路:

在我看来这道题跟正整数分组有一点点类似,因为我们很容易就想到了暴力解决!就是求出所有的情况然后在进行比较,最后筛选出最小周长的情况进行输出,但其实我们并不需要这样子操作。我们想一下周长最短意味着什么,我们设a为其中一条边的长度,然后另外一条边的长度为s/a(真的是数学的除不涉及C++语言),(a+s/a)*2就是我们的周长,根据不等式

a+b>=2*根号下a*b,前提是a=b=sqrt(s),根据我们以前学习过的对勾函数来看,这个函数将会在这个转折点左右略有上升,那么我们就在sqrt(s)减减的这种情况下找离转折点最近的符合情况,这样子找到的就是我们要求的最小周长。

#include<iostream>#include<cmath> using namespace std;int main(){double s=0;while(cin>>s){int a=sqrt(s);while((s/a)*a!=s){a--;}cout<<(a+s/a)*2<<endl;}}


原创粉丝点击