1105: 这里有一张图
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 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
#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;
}