Loading... ## 第一题: ### 题目描述 <div class="tip inlineBlock info"> **门牌制作**: 小蓝要为一条街的住户制作门牌号。 这条街一共有2020 位住户,门牌号从1 到2020 编号。 小蓝制作门牌的方法是先制作0 到9 这几个数字字符,最后根据需要将字符粘贴到门牌上,例如门牌1017 需要依次粘贴字符1、0、1、7,即需要1 个字符0,2 个字符1,1 个字符7。 请问要制作所有的1 到2020 号门牌,总共需要多少个字符2? </div> ### 题解: ```cpp #include<bits/stdc++.h> using namespace std; int res = 0; void check(int n){ while(n){ int tmp = n % 10; if(tmp == 2) res ++; n /= 10; } } int main() { for(int i = 1; i <= 2020; i++){ check(i); } cout << res << endl; return 0; } ``` ### 第三方oj: **http://oj.ecustacm.cn/problem.php?id=1508** ### 答案: **624** ## 第二题: ### 题目描述: <div class="tip inlineBlock info"> 既约分数: 如果一个分数的分子和分母的最大公约数是1,这个分数称为既约分数。 请问,有多少个既约分数,分子和分母都是1 到2020 之间的整数(包括1和2020)? </div> ### 题解: ```cpp #include<bits/stdc++.h> using namespace std; int main() { int res = 0; for(int i = 1; i <= 2020; i++){ for(int j = 1; j <= 2020; j++){ if(__gcd(i, j) == 1) res ++; } } cout << res << endl; return 0; } ``` ### 第三方oj: **http://oj.ecustacm.cn/problem.php?id=1509** ### 答案: **2481215** ## 第三题: ### 题目描述: <div class="tip inlineBlock info"> 蛇形填数: 如下图所示,小明用从1 开始的正整数“蛇形”填充无限大的矩阵。 1 2 6 7 15 ... 3 5 8 14 ... 4 9 13 ... 10 12 ... 11... 容易看出矩阵第二行第二列中的数是5。请你计算矩阵中第20 行第20 列的数是多少? </div> ### 题解: ```cpp #include<bits/stdc++.h> using namespace std; int main() { int res = 1; for(int i = 2; i <= 20; i++){ res += (i-1) * 4; } cout << res; return 0; } ``` ### 第三方oj: **http://oj.ecustacm.cn/problem.php?id=1510** ### 答案: **761** ## 第四题: ### 题目描述: <div class="tip inlineBlock info"> 七段码: 给出了七段码数码管的一个图示,数码管中一共有7 段可以发光的二极管,分别标记为a, b, c, d, e, f, g。 小蓝要选择一部分二极管(至少要有一个)发光来表达字符。在设计字符的表达时,要求所有发光的二极管是连成一片的。 例如:b 发光,其他二极管不发光可以用来表达一种字符。 例如:c 发光,其他二极管不发光可以用来表达一种字符。这种方案与上一行的方案可以用来表示不同的字符,尽管看上去比较相似。 例如:a, b, c, d, e 发光,f, g 不发光可以用来表达一种字符。 例如:b, f 发光,其他二极管不发光则不能用来表达一种字符,因为发光的二极管没有连成一片。 请问,小蓝可以用七段码数码管表达多少种不同的字符? </div> ### 题解: ```cpp ``` ### 第三方oj: **http://oj.ecustacm.cn/problem.php?id=1511** ### 答案: **不会** ## 第五题: ### 题目描述: <div class="tip inlineBlock info"> 跑步锻炼: 小蓝每天都锻炼身体。 正常情况下,小蓝每天跑1 千米。如果某天是周一或者月初(1 日),为了激励自己,小蓝要跑2 千米。如果同时是周一或月初,小蓝也是跑2 千米。 小蓝跑步已经坚持了很长时间,从2000 年1 月1 日周六(含)到2020 年10 月1 日周四(含)。 请问这段时间小蓝总共跑步多少千米? 这是一道结果填空的题,你只需要算出结果后提交即可。 本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。 </div> ### 题解: ```cpp #include<bits/stdc++.h> using namespace std; int months[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; bool check(int n){ int year = n / 10000; int month = n % 10000 / 100; int day = n % 100; if(month <= 0 || month > 12) return false; if(day <= 0 || months[month] < day && month != 2) return false; if(month == 2){ bool run = year % 4 == 0 && year % 100 || year % 400 == 0; if(run + months[2] < day) return false; } return true; } int main() { int res = 0, days = 5; for(int i = 20000101; i <= 20201001; i++){ if(check(i)){ if(days % 7 == 0 || i % 100 == 1) res += 2; else res++; days++; } } cout << res << endl; return 0; } ``` ### 第三方oj: **http://oj.ecustacm.cn/problem.php?id=1513** ### 答案: 8879 --- ## 第六题: ### 题目描述: <div class="tip inlineBlock info"> 回文日期: 2020 年春节期间,有一个特殊的日期引起了大家的注意:2020 年2 月2日。因为如果将这个日期按“yyyymmdd” 的格式写成一个8 位数是20200202,恰好是一个回文数。我们称这样的日期是回文日期。 有人表示20200202 是“千年一遇” 的特殊日子。对此小明很不认同,因为不到2 年之后就是下一个回文日期:20211202 即2021 年12 月2 日。 也有人表示20200202 并不仅仅是一个回文日期,还是一个ABABBABA型的回文日期。对此小明也不认同,因为大约100 年后就能遇到下一个ABABBABA 型的回文日期:21211212 即2121 年12 月12 日。算不上“千年一遇”,顶多算“千年两遇”。 给定一个8 位数的日期,请你计算该日期之后下一个回文日期和下一个ABABBABA 型的回文日期各是哪一天。 </div> ### 题解: ```cpp #include <bits/stdc++.h> using namespace std; int months[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; bool check(int n) { int year = n / 10000; int month = n % 10000 / 100; int day = n % 100; if(month <= 0 || month > 12) return false; if(day <= 0 || day > months[month] && month != 2) return false; if(month == 2) { int run = year % 4 == 0 && year % 100 || year % 400 == 0; if(day > run + months[2]) return false; } return true; } int main() { int n, c; cin >> c; while(c --) { cin >> n; int a = 0, b = 0; //a代表下一个回文日期,b代表 ABABBABA 型的回文日期 for(int i = 1000; i < 10000; i++) { int u = i, v = i; for(int i = 0; i < 4; i++) { u = u * 10 + v % 10; v /= 10; } int day = u % 100; int month = u % 10000 / 100; if(check(u) && u > n) { if(a == 0) a = u; if(b == 0 && day == month && day / 10 != day % 10) b = u; } } cout << a << endl << b << endl; } return 0; } ``` ### 第三方oj: **http://oj.ecustacm.cn/problem.php?id=1518** ## 第七题: ### 题目描述: <div class="tip inlineBlock info"> </div> ### 题解: ```cpp ``` ### 第三方oj: ## 第八题: ### 题目描述: <div class="tip inlineBlock info"> 成绩统计: 小蓝给学生们组织了一场考试,卷面总分为100 分,每个学生的得分都是一个0 到100 的整数。 如果得分至少是60 分,则称为及格。如果得分至少为85 分,则称为优秀。 请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整数。 </div> ### 题解: ```cpp #include <bits/stdc++.h> using namespace std; int main() { int n = 0, m = 0, c = 0, l; cin >> c; l = c; while(c --){ int tmp; cin >> tmp; if(tmp >= 60) n ++; if(tmp >= 85) m ++; } printf("%.0f%%\n%.0f%%", 100 * (double(n) / l), 100 * (double(m) / l)) ; return 0; } ``` ### 第三方oj: **http://oj.ecustacm.cn/problem.php?id=1563** ## 第九题: ### 题目描述: <div class="tip inlineBlock info"> 子串分值和 对于一个字符串S ,我们定义S 的分值f (S ) 为S 中出现的不同的字符个数。 例如f (”aba”) = 2, f (”abc”) = 3, f (”aaa”) = 1。 现在给定一个字符串S [0 : n - 1](长度为n),请你计算对于所有S 的非空子串S [i : j](0 ≤ i ≤ j < n), f (S [i:: j]) 的和是多少。 </div> ### 题解: ```cpp ``` ### 第三方oj: **http://oj.ecustacm.cn/problem.php?id=1523** ## 第十题: ### 题目描述: <div class="tip inlineBlock info"> 平面切分 平面上有N 条直线,其中第i 条直线是y = Ai * x + Bi。 请计算这些直线将平面分成了几个部分。 </div> ### 题解: ```cpp ``` ### 第三方oj: **http://oj.ecustacm.cn/problem.php?id=1524** 最后修改:2022 年 04 月 07 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果文章有用,请随意打赏。