算法竞赛入门经典 第一章习题解答

习题 1-1 平均数(average)

题目描述

输入3个整数,输出它们的平均值,保留3位小数。

解答

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

float average(float a,float b,float c)
{
float sum,aver;
sum = a + b + c;

aver = sum / 3;
return aver;
}

int main()
{
float a,b,c,ans;
cin >> a >> b >> c;

ans = average(a,b,c);
cout << ans;

return 0;
}

太过于基础,不过多描述。

习题1-2 温度(temperature)

题目描述

输入华氏温度f,输出对应的摄氏温度c,保留3位小数。提示:c=5(f-32)/9。

解答

1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;

int main()
{
int f,c;
cin >> f;
float c = 5.0 * (f - 32) / 9;
cout << c;

return 0;
}

也是相当简单的。

习题1-3 连续和(sum)

题目描述

输入正整数n,输出1+2+…+n的值。提示:目标是解决问题,而不是练习编程。

解答

终于是上难度了。

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;

int sum(int EndNumber)
{
int sum = 0;
for (int i = 0;i <= EndNumber;i++)
{
sum = sum + i;
}
return sum;
}

int main()
{
int EndNumber,ans;
cin >> EndNumber;
ans = sum(EndNumber);
cout << ans;
}

这个题也可以用 等差数列求和公式 来解决。

等差数列求和公式:Sum=[n×(n+1)]/2

习题1-4 正弦和余弦(sin and cos)

┐(‘~`;)┌ 我才初二啊,数学没学,不会

习题1-5 打折(discount)

题目描述

一件衣服95元,若消费满300元,可打八五折。输入购买衣服件数,输出需要支付的金额(单位:元),保留两位小数。

解答

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

float pay(int qty)
{
float money = 95.0 * qty;

if (money >= 300.0)
{
money = money * 0.85;
return money;
}
else
{
return money;
}
}

int main()
{
int qty;
float money;
cin >> qty;
money = pay(qty);
cout << money;
}

习题1-6 三角形(triangle)

题目描述

输入三角形3条边的长度值(均为正整数),判断是否能为直角三角形的3个边长。如果可以,则输出yes,如果不能,则输出no。如果根本无法构成三角形,则输出not a triangle。

解答

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

int main()
{
int a,b,c;
cin >> a >> b >> c;

if ((a + b <= c) || (a + c <= b) || (b + c <= a))
{
cout << "not a triangle";
return 0;
}

if ((a * a + b * b == c * c) || (a * a + c * c == b * b) || (b * b + c * c == a * a))
{
cout << "yes";
}
else
{
cout << "no";
}

return 0;
}

使用两边之和大于第三边判断是否为三角形,使用勾股定理判断是否为直角三角形。

习题1-7 年份(year)

题目描述

输入年份,判断是否为闰年。如果是,则输出yes,否则输出no。
提示:简单地判断除以4的余数是不够的。

解答

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

int main()
{
int year;
cin >> year;

if (((year % 4 == 0) && (year % 100 != 0)) || (year % 400 == 0))
{
cout << "yes";
return 0;
}
else
{
cout << "no";
return 0;
}
}

闰年判断方法:四年一闰,百年不闰,四百年再闰。
也就是说:

  • 如果年份能被4整除且不能被100整除,则是闰年。
  • 如果年份能被400整除,则是闰年。
  • 否则不是闰年。

总结

至此,我们已经完成了《算法竞赛入门经典》第一章的习题解析。通过这一章的基础训练,相信你对编程竞赛的思维模式和代码规范有了更深的体会。算法竞赛的旅途从来不是一蹴而就的,每一个正确通过的测试用例、每一个优化掉的超时边界、每一个恍然大悟的解题思路,都是你在这条路上留下的坚实脚印。

在后续章节中,我们会逐步深入数据结构、动态规划、图论等核心领域,但请始终牢记:扎实的基础和反复的实践是应对复杂问题的基石。如果在后续学习中遇到瓶颈,不妨回头重新审视这些基础问题,往往会有新的启发。

愿你在不断调试代码与思维的过程中,感受到算法之美与编程之乐。下一章,我们不见不散!