一个矩形的面积为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 " , 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; }