算法入门经典 例题 1-1

好的,从今天开始,我将学习刘汝佳老师的《算法竞赛入门经典》,以便冲刺今年九月份的 CSP-J。

题目

输入底面半径 r 和高 h,输出圆柱体的表面积,保留3位小数。

样例输入:

1
3.5 9

样例输出:

1
Area = 274.889

解答

由于题目过于简单,上过小学的人都会逻辑,所以没有分析。

初版解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
using namespace std;

float area(r,h)
{
int s;
s = 2 * pi * r ** 2 + 2 * pi * r * h;
return s;
}

int main()
{
int r,h,a;

cin >> r >> h;
a = area(r,h);
cout << "Area = " << a;

return 0;
}

大意了,这个程序存在以下问题:

  1. 参数类型缺失

    float area(r,h) 未声明参数类型。

  2. 未定义常量 π

    C++ 标准库中没有预定义的 pi

  3. 错误的幂运算符

    C++ 不支持 ** 运算符。

  4. 变量类型不匹配

  5. 公式优化

这个故事告诉我们:

不要以为语言入门之后就能轻易地写出算法程序。
——《算法竞赛入门经典》前言

这也是我以前存在的问题。

修改解答

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;

float area(float r,float h)
{
float s,pi;
pi = 3.1415926;
s = 2 * pi * r * r + 2 * pi * r * h;
return s;
}

int main()
{
float r,h,a;

cin >> r >> h;
a = area(r,h);
cout << "Area = " << a;

return 0;
}

完美通过

收工!

祝各位读者早日成为神牛牪犇!