天天看点

HDU 6154 CaoHaha's staff

题目链接

题目意思

给你一个面积,让你求围成这个面积最少需要几条边,其中边的连线只能是在坐标轴上边长为1的的线或者是两个边长为1 的线的对角线。

解题思路

这其实就是一个找规律的题,我们列举前几个会发现,增加斜边,每增加一条边面积就能增加1.5,然后根据你所列出的边数跟面积的关系去找规律,其中每次能被4整除的数都能形成一个菱形,那是边数确定面积最大的。

代码部分

#include <bits/stdc++.h>
using namespace std;
const int MAX=;
double n[MAX],f=,p=;
void prit()
{
    memset(n,,sizeof(n));
    n[]=;
    n[]=;
    n[]=;
    for(int i=; i<=MAX; i++)
    {
        int y=i%;
        if(y==)
        {
            n[i]=n[i-]+f;
            f+=;
        }
        if(y==)
        {
            n[i]=n[i-]+p;
            p+=;
        }
        if(y==)
        {
            n[i]=n[i-]+f;
        }
        if(y==)
        {
            n[i]=n[i-]+p;
        }
    }
}
int main()
{
    prit();
    int T;
    scanf("%d",&T);
    while(T--)
    {
        double N;
        scanf("%lf",&N);
        for(int i=; i<=MAX; i++)
        {
            if(n[i]>=N)
            {
                printf("%d\n",i);
                break;
            }
        }
    }
}