【深入浅出程序设计竞赛】:变量和常量、评测机队列

108 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 16 天,点击查看活动详情

变量和常量

请输出半径 r 为 5 的圆的周长、面积以及体积。(取圆周率 π\pi3.141593

  • 根据公式:
  • 周长 C=2πrC = 2 \pi r
  • 面积:S=πr2S = \pi r^{2}
  • 体积:V=43πr2V = \frac{4}{3}\pi r^{2}
  • 写出程序如下:
#include<iostream>
#include<cmath>
using namespace std;

const double PI = 3.141593;

int main() {
    double r = 5;
    cout << 2 * PI * r << endl;
    cout << PI * r * r << endl;
    cout << 4.0 / 3 * PI * pow(r, 3) << endl;
    return 0;
}

运行结果为:

31.4159
78.5398
523.599
  • 这里我们定义了一个常量 PI,因为程序中多次使用该圆周率 π\pi,就可以将其定义为常量。方法就是在数据类型的前面或者后面加上 const关键字。注意,常量一旦定义成功后,就不能在程序运行过程中修改,不然会出现编译错误。
  • 当然,我们还可以用另一种方式来定义常量:
    #define PI 3.141593
    
    这种方式的名称叫宏定义。程序编译时会将这这行后面的素有代码中的 PI 替换成 3.141593。

变量的命名规范:

  • 由英文字母、数字以及下划线(_)组成
  • 不能由数字开头
  • 不能和其他关键字重复,比如 intwhile

评测机队列

题目:

洛谷的评测任务是单位时间内均匀增加的。8台评测机 30 min 可以刚好把评测队列中的程序评测完毕,10 台评测机 6 min 可以刚好把评测队列中的程序评测完毕。请问:几台评测机可以在 10 min 时刚好把评测队列中的程序评测完毕?

记录:

  • 这是一道“牛吃草问题”的模型
  • 假设 1 台评测机 1min 可以评测出 1 份程序
  • 8 台评测机 30 分钟内可以评测 240 道题
  • 10 台评测机 6 分钟内可以评测 60 道题
  • 在这相差 24 分钟内,就增加了 180 道题,那么可以计算出增加的速度为 180/24 = 7.5 道题
  • 因为 6 分钟内增加了 6 * 7.5 = 45 道题,那么就证明原先有 60 - 45 = 15 道题
  • 题目问的是 10 分钟内需要多少台机器才能刚好评测完毕,那么首先算出需要评测多少道题目,即 10 * 7.5 + 15 = 90 道,
  • 又因为之前假设 1 台评测机 1min 可以评测出 1 份程序,那么十分钟内就需要 9 太评测机。

代码如下:

#include <bits/stdc++.h>

using namespace std;

int main() {
    // 8 台评测机 30 分钟内可以评测 240 道题
    int n1 = 8, t1 = 30;
    // 10 台评测机 6 分钟内可以评测 60 道题
    int n2 = 10, t2 = 6;
    // 几台评测机可以在 10 min 时刚好把评测队列中的程序评测完毕?
    int t3 = 10;
    // 这相差 24 分钟内,就增加了 180 道题,计算出增长速度 incRate
    double incRate = (1.0 * n1 * t1 - n2 * t2) / (t1 - t2);
    // 求出原先有多少道题  initNum
    double initNum = n1 * t1 - incRate * t1;
    // 计算出答案 :ans
    double ans = (initNum + t3 * incRate) / t3;
    cout << ans << endl;
    return 0;
}

运行结果为:

9