题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6154
画图形找规律。
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
int cnt;
const int maxn = 1e5;
int num[maxn]; ///面积对应的线段条数
double area[maxn]; ///面积
void createTable()
{
double sum1=1.5,sum2=4;
area[0] = 0.5;
num[0] = 3;
area[1] = 2;
num[1] = 4;
area[2] = 2.5;
num[2] = 5;
area[3] = 4;
num[3] = 6;
area[4] = 5.5;
num[4] = 7;
cnt=5;
for(int i = 8; i < maxn; i++) ///线段条数。
{
int yu=i%4;
if(yu==0)
{
area[cnt]=area[cnt-2]+sum2;
}
else if(yu==3)
{
area[cnt]=area[cnt-1]+sum1;
}
else
if(yu==2)
{
area[cnt]=area[cnt-2]+sum2;
sum2+=2.0;
}
else
if(yu==1)
{
area[cnt]=area[cnt-1]+sum1;
sum1+=1.0;
}
num[cnt]=i;
cnt++;
}
}
int main()
{
int t ;
double n;
createTable();
scanf("%d",&t);
while(t--)
{
scanf("%lf",&n);
if(n<=0)
{
printf("0\n");
continue;
}
int pos = lower_bound(area,area+cnt,n)-area;
printf("%d\n",num[pos]);
}
return 0;
}