一个矩形的面积为S,已知该矩形的边长都是整数,求所有满足条件的矩形中,周长的最小值。例如:S = 24,那么有{1 24} {2 12} {3 8} {4 6}这4种矩形,其中{4 6}的周长最小,为20。
Input
输入1个数S(1 <= S <= 10^9)。
Output
输出最小周长。
Input示例
24
Output示例
20
虽然是一道简单的水题,但是通过比较别人的代码和自己的代码,还是学到了一些知识
别人的代码
15ms 2060kb
#include <bits/stdc++.h>
using namespace std;
int main()
{
long long s , i , j;
scanf("%lld", &s);
long long ans = 0x3f3f3f3f;
i = (long long)sqrt(s);
while(s % i != 0)
i--;
ans = i * 2 + (s / i) * 2;
printf("%lld\n" , ans);
return 0;
}
我的代码
156ms 1706kb
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int i,j,k;
int maxn = 0;
int main()
{
int s;
scanf("%d",&s);
j=s;
for(i=1; i<s/2; i++)
{
if(s%i==0)
{
j = s/i;
if(i>j) break;
maxn = max(i,maxn);
}
}
k = s/maxn;
printf("%d",2*(k+maxn));
return 0;
}