浙江大学在线评测系统 ZOJ http://acm.zju.edu.cn/onlinejudge/
1.2 正确处理多组测试数据的实验范例
1.2.1 Doubles
1.3 提高实数精度的实验范例
1.3.1 I Think I Need a Houseboat
Louisiana 路易斯安那州 Mississippi River密西西比河
这次取整过程应使用向上取整函数ceil(x)。若使用向下取整函数floor(x),则可能提前1年失去土地。
在实数运算中,经常需要判断实数x和实数y是否相等,而编程者往往把判断条件简单设成y-x是否等于0。实际上,这种写法是有失偏颇的,可能会产生精度误差。避免精度误差的办法是设一个精度常量delta。若y-x的实数值与0之间的区间长度小于delta,则认定x和y相等,这样就可将误差控制在delta范围内(图1.3-2)。
显然,判断实数x和实数y是否相等的条件应设成|y-x|<=delta。
C:UsersHONGZHENHUAsource eposSimple CalculationSimple CalculationI Think I Need a Houseboat.cpp
//#define M_PI 3.14159265358979323846 #include "pch.h" #include <stdio.h> //预编译指令 //#include <iostream> #define _USE_MATH_DEFINES //#include <math.h> #include <cmath> using namespace std; int num_props; //定义测试数据组数为整数 float x, y; //定义笛卡儿坐标为单精度实数 int i; //这里定义i是为了方便printf输出 double calc; //定义“半圆面积/50”为双精度实数 int years; //定义失去土地的年份为整数 int main(void) //主函数 { //主函数开始 scanf_s("%d", &num_props); //输入测试数据组数 for (i = 1;i <= num_props;i++) { scanf_s("%f%f", &x,&y); //输入第i个考虑购买的土地位置 calc = M_PI * (x *x + y *y) / 2 / 50; //计算“半圆面积/50",上取整后即为土地失去的年份 years = ceil(calc); printf("Property %d:This property will begin eroding in year %d. ",i,years); } printf("END OF OUTPUT. "); }
1.4 使用二分法提高计算时效的实验范例
1.4.1 Hangover
许多算法都采用了二分法。例如二分法查找、减半递推技术、快速排序、合并排序、最优二叉树、线段树等。其中相对比较浅显的算法是二分法查找和减半递推技术,使用这两种方法解简单计算题,可以显著提高计算时效。
len为递增序列:len[i]-len[i-1]=1/(i+1),i>1;由于len的表元素和被查找的x为实数,因此要严格控制精度误差。设精度=1e-8。
二分法不仅可用于数据查找,亦可用于函数计算。减半递推算法。
1.4.2 Humidex
由题目给出的湿热指数公式可以看出,h与露点呈正比关系。显然,已知露点和温度(或湿热指数),则可先由露点推出h值,再由“湿热指数=温度+h”的公式得出湿热指数(或由公式“温度=湿热指数-h”得出温度)。但问题是若已知的两个测试量是温度和湿热指数,怎么计算露点值呢?我们采取减半递推技术。
1.5 相关题库
1.5.1 Sum
C:UsersHONGZHENHUAsource eposSimple CalculationSimple CalculationSum.cpp
#include "pch.h" #include <iostream> //预编译指令 #include <cmath> // using namespace std; //使用C++标准程序库中的所有标识符 int main() { int n; cin >> n; while (abs(n) <= 10000) { int ans; if (n <= 0) { ans = (1 - n)*n / 2 + 1; } else { ans = (n + 1)*n / 2; } cout << ans << endl; cin >> n; } }
1.5.2 Specialized Four-Digit Numbers
1.5.3 Quicksum
1.5.4 A Contesting Decision
1.5.5 Dirichlet's Theorem on Arithmetic Progressions
1.5.6 The Circumference of the Circle
1.5.7 Vertical Histogram
1.5.8 Ugly Numbers
1.5.9 排列
1.5.10 Number Sequence