【深入浅出程序设计竞赛】:解决算法问题的步骤以及简单的数学运算

177 阅读2分钟

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

解决算法问题的步骤

(1)分析问题,理解题意

首先需要明确程序应该 “做什么”,并且从题目描述中知道给什么输入,需要怎么处理数据,以及如何输出这些数据。

(2)建立模型,设计算法

算法指的是一套确定的,有限的,能解决特定问题的流程。通过思考程序应该“如何做”,来设计一套有效甚至高效的算法,是我们的目标。

(3)编写程序

根据我们之前的分析,来一步步编写程序。

(4)调试、编译运行与测试

写完程序后,很可能会有一些错误,其中包括逻辑错误和编译错误等。

如果是逻辑错误,我们需要重新审视一下题目,思考是否理解错了题意或者算法本身是不正确的,这样我们就需要重新设计新的算法。

如果是编译错误,根据编译器的提示,我们需要更正错误,最后让计算机进行编译运行,并检查是否符合我们的期望。

简单的数学运算

整除

C++ 中,符号 / 表示整除的意思。

比如:

#include<bits/stdc++.h>
using namespace std;
int main() {
    cout << 14 / 4 * 4; 
    return 0;
}

上述语句运行结果为:

12

在数学中,14 / 4 * 4 应该还是 14,但是在C++中,就是 14除以4后向下取整,得到 3 ,再乘以 4 得到结果 12

浮点数

#include<bits/stdc++.h>
using namespace std;
int main() {
    cout << 100.0 / 3; 
    return 0;
}

运行程序,输出:

33.3333

在计算机中,100 被认为是整数,但是 100..0 是浮点数,二者不同。如果我们希望得到一个带有小数的结果,那么需要将运算符两边至少一个数字以浮点数的形式表示(在整数后面添加上 .0)。

另外,使用 cout 输出浮点数,默认保留不超过 6 位有效数字。如果在计算过程中,数字过大或者过小,就会使用科学计数法来输出。

比如:

#include<iostream>
using namespace std;
int main() {
    cout <<  5000000.0 / 3;
    return 0;
}

运行结果:

1.66667e+006

数学函数

一个长方形的长和宽分别是 3cm、4cm,求它的对角线长度。

解题:根据勾股定理,答案为:32+42\sqrt{3^{2} + 4^{2}}

#include<iostream>
#include<cmath>
using namespace std;
int main() {
    cout <<  sqrt(pow(3, 2) + pow(4, 2));
    return 0;
}

运行结果:

5

可以看到,这里使用了新的头文件:<cmath>。该头文件和数学有关。上面这个程序使用了pow()sqrt()两个函数,都是在<cmath> 头文件中的。

函数可以被认为是一种实现特定功能的工具,把数据调入对应功能的函数中,这个函数就会在计算后返回值。不同函数的输入变量和输出类型会不同,有的函数甚至没有输入或者输出。

pow(3, 2) 的意思是计算 3 的 2 次方,即 323^2sqrt() 的意思是计算括号里的算术平方根。这两个函数都是返回一个浮点数。

当然,<cmath> 头文件中不止这两个函数,还有很多其他实用的数学函数。函数原型如下:

  • sin(double x):三角函数正弦,x是弧度
  • cos(double x):三角函数余弦,x是弧度
  • exp(double x):返回exe^x,其中ee是自然常数
  • log(double x):返回 xx 的自然对数
  • fabs(double x):返回 xx 的绝对值
  • ceil(double x):返回大于或等于 xx 的最小整数(向上取整)
  • floor(double x):返回小于或等于 xx 的最大整数(向下取整)

注意,上述函数的返回值都是 double 类型的值,并且如果输入的参数 xxintfloat 等类型,就会自动转换为 double 类型。