1105: 这里有一张图

1105: 这里有一张图

Time Limit: 1 Sec   Memory Limit: 128 MB
Submit: 82   Solved: 58
[ Submit][ Status][ Web Board]

Description

这里有一张图,这张图是这样的:

 

1,四个点A0(0,0), B0(0,1), C0(1,1), D0(1,0) 在一个坐标系上,分别对应着图的四个角

2,连接A0B0, B0C0, C0D0, D0A0,形成一个正方形A0B0C0D0

3,假设我们已经生成了正方形AiBiCiDi,那么正方形Ai+1Bi+1Ci+1Di+1则由AiBi, BiCi, CiDi 和 DiAi 四条边的中点连接形成的

4,重复上面三个步骤1000次

现在有一条垂直线x = k(0 < = k < 0.5,k最多取到小数点后八位)。辣么问题来了,垂线x和这个图形一共有多少个交点呢?

 

Input

在第一行是一个整数T(T < 10000),表示测试用例的数量。

接下来T行,每一行表示一个测试用例。每一行包含一个浮点数k。

 

Output

对于每个测试用例,输出一个整数表示答案。如果有无穷多个交点,则输出-1。


Sample Input

3
0.375
0.001
0.478

Sample Output

-1
4
20

HINT




Source

[ Submit][ Status]

#include <cstdio>
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>

using namespace std;


int main(){

    int cnt;
    int t;
    double n,m,num;
    scanf("%d",&t);
    
    while(t--){
        n=0.0f;
        m=0.5f;
        cnt=0;
        scanf("%lf",&num);
        if(num==0){
            printf("-1");
            if(t!=0)printf("\n");
        }//忘记考虑取0的情况了
        while(num>n){
            cnt++;
            n=(n+m)/2;
          
            if(n>num){
              printf("%d",cnt*4);
                if(t!=0)printf("\n");
              
            }else
                if(n==num){
                    printf("-1");
                    if(t!=0)printf("\n");
                }
            
        }
        

    }
    

    return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值