zoukankan      html  css  js  c++  java
  • 第一篇 基本能力的编程实验 第1章 简单计算的编程实验

    浙江大学在线评测系统 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

  • 相关阅读:
    最短路径算法 2.Dijkstra算法
    最短路径算法 1.Floyed-Warshall算法
    POLYGON(动态规划)
    JAG Asia 2016-Similarity of Subtrees(BFS+哈希)
    2019ACM-ICPC南京网络赛Holy Grail (SPFA / Floyd 模板题)
    2019ACM-ICPC南京网络赛Greedy Sequence
    快速输入输出
    2019HDU多校训练第七场J-Just Repeat
    JAG Asia 2017 C-----Prime-Factor Prime(素数区间筛)
    2019HDU多校训练第五场1007-permutation 2
  • 原文地址:https://www.cnblogs.com/ZHONGZHENHUA/p/10384245.html
Copyright © 2011-2022 走看看