算法竞赛入门经典 第二章习题解答
算法竞赛入门经典 第二章习题解答 习题 2-1 水仙花数(daffodil)题目描述输出 100~999 中的所有水仙花数。若 3 位数 ABC 满足 [ABC = A^3 + B^3 + C^3] 则称其为水仙花数。例如 153= (1^3+5^3+3^3) ,所以 153 是水仙花数。 解答123456789101112131415161718#include<iostream>using namespace std;int main(){ int a, b, c = 0; for (int num = 100; num <= 999; num++) { a = num / 100; b = (num / 10) % 10; c = num % 10; if (num == (a * a * a) + (b * b * b) + (c * c * c)) { cout << num...
算法入门经典 习题 2-3
算法入门经典 习题 2-3题目输入正整数 n≤20,输出一个 n 层的倒三角形。 例如,n=5 时输出如下: 12345######### ####### ##### ### # 解答我们来分析一下: 行号 空格数 符号数 输出内容 0 0 9 ######### 1 1 7 ####### 2 2 5 ##### 3 3 3 ### 4 4 1 # 初版(有 bug)12345678910111213141516171819202122232425262728293031323334353637#include<iostream>using namespace std;int triangle(int a){ //a:层数 a = a * 2 - 1; for (int i = 0; i <= a; i = i + 2) { //i:每行个数 int b = 0; //添加空格 int j = 1; ...
算法入门经典 例题 2-4
算法入门经典 例题 2-4访问量:31 题目阶乘之和:输入 n,计算 S=1!+2!+3!+…+n!的末 6 位(不含前导 0)。n≤106 ,n!表示前 n 个正整数之积。 样例输入: 110 样例输出: 137913 解答这里应该用双层 for 循环,对于每个 i,乘每一个 j(如程序)。 初版(有 bug)12345678910111213141516171819202122#include <iostream>using namespace std;int main(){ int n; int sum = 0; cin >> n; for (int i; i <= n; i++) { int a = 1; for (int j; j <= i; j++) { a = i * j; sum = sum + a; } } sum = sum %...
杂谈 NOI 路线
杂谈 NOI 路线刷知乎无意间刷到问题如何看待《算法竞赛进阶指南》与《信息学奥赛一本通·提高篇》多页内容雷同,后者疑似抄袭?中,李煜东大佬推荐的学习流程竟然惊人的一致为了能帮助广大和我一样的苦命 OIer,特地转载一下: OI / ICPC 入门到提高的话…… 我的建议是 买一本《C++ Primer Plus》(中文版就行),看前几章学语言(不用看面向对象之后的内容)。 买一本《算法竞赛入门经典》,学入门级别算法,上面也有一些语言的内容,所以 C++ Primer Plus 粗略地读就行了。 买一本《算法竞赛进阶指南》,提高算法和数据结构水平。 UPD:还有评论推荐《挑战程序设计竞赛》,不过我没读过…… 看作者应该还不错 之后就不用看书了,刷 OJ / 读论文 / 做 CF 等 Online Contest...
算法入门经典 例题 2-2
算法入门经典 例题 2-2题目猜想:对于任意大于1的自然数n,若n为奇数,则将n变为3n+1,否则变为n的一半。经过若干次这样的变换,一定会使n变为1。例如,3→10→5→16→8→4→2→1。 解答很简单的重复性程序,没什么技术含量。 12345678910111213141516171819202122232425262728#include <iostream>using namespace std;int main(){ int n; cin >> n; int j = 0; while (n > 1) { if (n % 2 == 1) { j++; n = 3 * n + 1; continue; } else { j++; n = n / 2; ...
算法入门经典 例题 2-1
算法入门经典 例题 2-1题目输出所有形如 aabb 的 4 位完全平方数(即前两位数字相等,后两位数字也相等)。 解答这个题目乍一看,有两种思路: 列举所有完全平方数,再找其中形如 aabb 的。 列举所有形如 aabb 的数,再找其中的完全平方数。 经过我的抉择,我选择了第一种思路 (绝对不是因为我不会判断一个数是否为完全平方数) 解答1234567891011121314151617181920212223242526#include<iostream>using namespace std;int main(){ for (int i = 1; ; i++) { int allnum = i * i; if (allnum > 9999) { break; } int a1 = allnum / 1000; int a2 = allnum / 100 - a1 * 10; int...
算法竞赛入门经典 第一章习题解答
算法竞赛入门经典 第一章习题解答习题 1-1 平均数(average)题目描述输入3个整数,输出它们的平均值,保留3位小数。 解答12345678910111213141516171819202122#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...
算法入门经典 例题 1-4(鸡兔同笼)
算法入门经典 例题 1-4(鸡兔同笼)题目鸡和兔总数量为 n,总腿数为 m。输入 n 和 m,依次输出鸡的数目和兔的数目。若无解,那么输出 No answer。 解答这里开始上难度,但是鸡兔同笼是小学学的。。。 定义变量 j、t,分别表示鸡的数量、兔子的数量。 先来写出两个关系式: j + t = n 2j + 4t = m 代入消元 t = (m-2n)/2 所以 j = n – t 并且,我们也要考虑,输入的 m、n 必须为正整数。 那么,我们可以写出以下代码: 12345678910111213141516171819202122232425262728#include <iostream>using namespace std;int main(){ /* n:总数量 m:总腿数 j:鸡数量 t:兔数量 */ int m,n,j,t; cin >> n >> m; t = (m - 2 * n) / 2; ...
算法入门经典 例题 1-3
算法入门经典 例题 1-3算法是思想的体操,竞赛是智慧的碰撞。 题目输入两个整数 a 和 b,交换二者的值,然后输出。 解答这一个例题甚至比上一个简单,解法直接使用经典的“三变量法”就行了。 解答1234567891011121314#include <iostream>using namespace std;int main(){ int a,n,m; cin >> n >> m; a = n; n = m; m = a; cout << n << " " << m;} 过! 祝各位读者早日成为神牛牪犇!
算法入门经典 例题 1-2
算法入门经典 例题 1-2题目输入一个三位数,分离出它的百位、十位和个位,反转后输出。 解答其实题目也很简单,难点在于如何分离出它百位、十位和个位。 百位 = n/100 十位 = n/10%10 个位 = n%10 解答1234567891011121314151617181920212223#include <iostream>using namespace std;int exchange(int n){ int hundred,ten,one,a; hundred = n / 100; ten = n / 10 % 10; one = n % 10; a = one * 100 + ten * 10 + hundred; return a;}int main(){ int n,ans; cin >> n; ans = exchange(n); cout << ans; return...