问题描述:
小东和三个朋友一起在楼上抛小球,他们站在楼房的不同层,假设小东站的楼层距离地面N米,球从他手里自由落下,每次落地后反跳回上次下落高度的一半,并以此类推知道全部落到地面不跳,求4个小球一共经过了多少米?(数字都为整数)
给定四个整数A,B,C,D,请返回所求结果。
测试样例:100,90,80,70
返回:1020
返回:1020
分析:
其实这道题目是有陷阱的,在高度的计算过程中不能用整型,而必须用浮点类型,否则容易造成精度的确实。
源代码:
#include<stdio.h>
#include<stdlib.h>
double calcTemp(int A)
{
if (A < 1)
return 0;
double A1 = (double)A;
double sum = A1;
while (A1)
{
sum += A1;
A1 /= 2;
}
return sum;
}
int calcDistance(int A, int B, int C, int D)
{
double A1 = calcTemp(A);
double B1 = calcTemp(B);
double C1 = calcTemp(C);
double D1 = calcTemp(D);
return A1 + B1 + C1 + D1 +0.5;
}
int main()
{
printf("%d\n", calcDistance(100, 90, 80, 70));
printf("%s %s\n", __DATE__, __TIME__);
system("pause");
return 0;
}
运行结果:
1020
Aug 29 2016 11:07:48
请按任意键继续. . .