随笔分类 - 《算法竞赛入门经典》学习题目
摘要:题目: 在n × n 方阵里填入1,2,...,n × n。要求填成蛇形。例如,n = 4时方阵为: 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4 上面的方阵中,多余的空格只是为了便于观察规律,不必严格输出。 n <= 8。 思路: 由题目可知,矩阵为方阵,因此用二维
阅读全文
摘要:题目: 有 n 盏灯,编号为 1 ~ n。第 1 个人把所有灯打开,第 2 个人按下所有编号为 2 的倍数的开关(这些灯将被关掉),第 3 个人按下所有编号为 3 的倍数的开关,以此类推。共有 k 个人,问最后有哪些灯开着。输入 n 和 k ,输出开着的灯的编号。 k <= n <= 1000。 样
阅读全文
摘要:题目: 输出所有形如aabb的4位完全平方数(即前两位数字相等, 后两位数字也相等) 思路: 用枚举法列出所有可能组合,然后判断该数是否为完全平方数。并且 a 从 1 开始, b 从 0 开始。 代码: #include <iostream>#include <cmath>using namespa
阅读全文
摘要:题目: 输入正整数a, b,c,输出 a / b 的小数形式,精确到小数点后 c 位。a ,b <= 10^6, c <= 100。输入包含多组数据,结束标记为 a = b = c = 0. 样例输入: 1 6 4 0 0 0 样例输出: Case 1: 0.1667 思路: 按照步骤计算即可。 代
阅读全文
摘要:题目: 输入两个正整数 n < m < 10^6 , 输出 1 / n2 + 1 / (n + 1)2 + ...+ 1 / m2,保留5位小数。输入包含多组数据,结束标记为 n = m = 0 。提示:本题有陷阱。 样例输入: 2 4 65536 655360 0 0 样例输出: Case 1:
阅读全文
摘要:题目: 输入正整数 n <= 20,输出一个倒三角形。例如, n = 5时输出如下: # # # # # # # # # # # # # # # # # # # # # # # # # 思路: 观察可知,可以将上图分为三部分,左半部分都为#,中间部分为 1 排竖的#,右半部分与左半部分对称。 输出的
阅读全文
摘要:题目: 相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后三人一排,五人一排,七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了。输入包含多组数据,每组数据包含3个非负整数 a,b,c,表示每种队形排尾的人数( a < 3 , b < 5, c < 7),输出总人数的最小值(或报
阅读全文
摘要:题目: 输出100~999中的所有水仙花数,若3位数满足ABC = A^3 + B^3 + C^3,则称其为水仙花数。例如153 = 1^3 + 5^3 + 3^3,所以153是水仙花数。 思路: 将每个数字的个位,十位,百位分离开,然后按照步骤计算即可。 代码: #include <iostrea
阅读全文
摘要:题目: 输入一些整数,求出它们的最小值,最大值和平均值(保留3位小数),输入保证这些数都是不超过1000的整数。 输入包含多组数据,每组数据第一行是整数个数 n ,第二行是 n 个整数。 n = 0 为输入结束标记,程序应当忽略这组数据。相邻两组数据之间应输出一个空行。 样例输入: 8 2 8 3
阅读全文
摘要:题目: 输入一些整数,求出它们的最小值,最大值和平均值(保留3位小数)。输入保证这些数都是不超过1000的整数。 样例输入: 2 8 3 5 1 7 3 6 样例输出: 1 8 4.375 思路: 因为输入数据的个数不确定,所以要用while循环来读取,同时用累加器 sum 记录总和,计数器 cnt
阅读全文
摘要:题目: 输入 n ,计算 S = 1! + 2! + 3! + ...+ n! 的末6位(不含前导0)。 n <= 10^6, n!表示前 n 个正整数之积。 样例输入: 10 样例输出: 37913 思路: 用一个累加器 sum 来记录总和,用 term 来表示每一项的阶乘。 第一种方法是用二重循
阅读全文
摘要:题目: 计算 π / 4 = 1 - 1 / 3 + 1 / 5 - 1 / 7 + ...,直到最后一项小于 10 ^ -6。 思路: 数列的通项可以表示为 1 / (2 × i + 1 ),观察可知,当 i 是 2 的倍数时,该项为正,否则为负。可以用循环实现累加,每次累加之后判断是否满足条件。
阅读全文
摘要:题目: 猜想:对于任意大于 1 的自然数 n ,若 n 为奇数, 则将 n 变为 3 n + 1 , 否则变为 n 的一半。经过若干次这样的变换,一定会使 n 变为 1. 输入 n ,输出变换的次数。n <= 10^9。 样例输入: 3 样例输出: 7 思路: 当结果不为1时进行循环,用计数器来计算
阅读全文
摘要:题目: 输入年份, 判断是否为闰年。如果是,则输出 yes,否则输出 no。提示:简单地判断除以4的余数是不够的。 思路: 判断闰年的方法是,该年满足下列两个条件之一,就是闰年 :(1)是4的倍数,但不是100的倍数,即 (year % 4 == 0 ) && (year % 100 != 0) (
阅读全文
摘要:题目: 输入三角形3条边的长度值(均为正整数),判断是否能为直角三角形的3个边长。如果可以,则输出 yes,如果不能,则输出 no。如果根本无法构成三角形,则输出not a triangle。 思路: 先判断3条边能否构成普通三角形,如果可以,那么继续判断能否构成直角三角形。 代码: #includ
阅读全文
摘要:题目: 一件衣服95元,若消费满300元,可打八五折。输入购买衣服件数,输出需要支付的金额(单位:元),保留两位小数。 思路: 直接计算即可。 代码: #include <iostream>using namespace std;int main(){ const int PRICE = 95; i
阅读全文
摘要:题目: 输入正整数 n (n < 360),输出 n 度的正弦,余弦函数值。提示:使用数学函数。 思路: 使用函数库中的函数即可。 代码: #include <iostream>#include <cmath>#include <iomanip>using namespace std;int mai
阅读全文
摘要:题目: 输入正整数 n ,输出 1 + 2 + ... + n 的值。提示:目标是解决问题,而不是练习编程。 思路: 利用高斯求和公式即可。 代码: #include <iostream>using namespace std;int main(){ int n = 0; cin >> n; int
阅读全文
摘要:题目: 输入华氏温度 f ,输出对应的摄氏温度 c,保留3位小数。提示:c = 5( f - 32) / 9 思路: 直接计算即可。 代码: #include <iostream>#include <iomanip>using namespace std;int main(){ double f =
阅读全文
摘要:题目: 输入3个整数,输出它们的平均值,保留3位小数。 思路: 直接计算即可。 代码: #include <iostream>#include <iomanip>using namespace std;int main(){ int a = 0, b = 0, c = 0; cin >> a >>
阅读全文

浙公网安备 33010602011771号