算法竞赛入门经典 第一章习题解答
习题 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整除,则是闰年。
- 否则不是闰年。
总结
至此,我们已经完成了《算法竞赛入门经典》第一章的习题解析。通过这一章的基础训练,相信你对编程竞赛的思维模式和代码规范有了更深的体会。算法竞赛的旅途从来不是一蹴而就的,每一个正确通过的测试用例、每一个优化掉的超时边界、每一个恍然大悟的解题思路,都是你在这条路上留下的坚实脚印。
在后续章节中,我们会逐步深入数据结构、动态规划、图论等核心领域,但请始终牢记:扎实的基础和反复的实践是应对复杂问题的基石。如果在后续学习中遇到瓶颈,不妨回头重新审视这些基础问题,往往会有新的启发。
愿你在不断调试代码与思维的过程中,感受到算法之美与编程之乐。下一章,我们不见不散!