P5725 【深基4.习8】求三角形

题目描述 模仿例题,打印出不同方向的正方形,然后打印三角形矩阵。中间有个空行。 输入格式 输入矩阵的规模,不超过 $9$。 输出格式 输出矩形和正方形 输入输出样例 #1 输入 #1 4 输出 #1 01020304 05060708 09101112 13141516 01 0203 040506 07080910 题解 #include<iostream> using namespace std; int main() { int n; cin >> n; int cnt = 1; for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { if (cnt <= 9) cout << 0 << cnt; else cout << cnt; cnt++; } cout << endl; } cout << endl; int count = 1; for (int a = 1; a <= n; a++) { int space = 0; while (space < 10 - 2 * (a + 1)) { cout << " "; space++; } for (int b = 1; b <= a; b++) { if (count <= 9) cout << 0 << count; else cout << count; count++; } cout << endl; } return 0; } 但是 WA 了 经过 debug,问题出在空格的输出上。 原本计算空格的公式为10 - 2 * (a + 1),应该为(n - a) * 2才对。 ...

四月 25, 2025 · 林墨瀚

P1089 津津的储蓄计划 [NOIP 2004 提高组]

题目 题目描述 津津的零花钱一直都是自己管理。每个月的月初妈妈给津津 $300$ 元钱,津津会预算这个月的花销,并且总能做到实际花销和预算的相同。 为了让津津学习如何储蓄,妈妈提出,津津可以随时把整百的钱存在她那里,到了年末她会加上 $20%$ 还给津津。因此津津制定了一个储蓄计划:每个月的月初,在得到妈妈给的零花钱后,如果她预计到这个月的月末手中还会有多于 $100$ 元或恰好 $100$ 元,她就会把整百的钱存在妈妈那里,剩余的钱留在自己手中。 例如 $11$月初津津手中还有 $83$ 元,妈妈给了津津 $300$ 元。津津预计$11$月的花销是 $180$ 元,那么她就会在妈妈那里存 $200$ 元,自己留下 $183$ 元。到了 $11$ 月月末,津津手中会剩下 $3$ 元钱。 津津发现这个储蓄计划的主要风险是,存在妈妈那里的钱在年末之前不能取出。有可能在某个月的月初,津津手中的钱加上这个月妈妈给的钱,不够这个月的原定预算。如果出现这种情况,津津将不得不在这个月省吃俭用,压缩预算。 现在请你根据 $2004$ 年 $1$ 月到 $12$ 月每个月津津的预算,判断会不会出现这种情况。如果不会,计算到 $2004$ 年年末,妈妈将津津平常存的钱加上 $20%$ 还给津津之后,津津手中会有多少钱。 输入格式 $12$ 行数据,每行包含一个小于 $350$ 的非负整数,分别表示 $1$ 月到 $12$ 月津津的预算。 输出格式 一个整数。如果储蓄计划实施过程中出现某个月钱不够用的情况,输出 $-X$,$X$ 表示出现这种情况的第一个月;否则输出到 $2004$ 年年末津津手中会有多少钱。 注意,洛谷不需要进行文件输入输出,而是标准输入输出。 输入输出样例 #1 输入 #1 290 230 280 200 300 170 340 50 90 80 200 60 输出 #1 -7 输入输出样例 #2 输入 #2 290 230 280 200 300 170 330 50 90 80 200 60 输出 #2 1580 分析 我们可以直接套模拟,模拟每个月的操作即可。 ...

三月 13, 2025 · 林墨瀚

P2669 金币 [NOIP 2015 普及组]

题目 题目背景 NOIP2015 普及组 T1 题目描述 国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续 $n$ 天每天收到 $n$ 枚金币后,骑士会在之后的连续 $n+1$ 天里,每天收到 $n+1$ 枚金币。 请计算在前 $k$ 天里,骑士一共获得了多少金币。 输入格式 一个正整数 $k$,表示发放金币的天数。 输出格式 一个正整数,即骑士收到的金币数。 输入输出样例 #1 输入 #1 6 输出 #1 14 输入输出样例 #2 输入 #2 1000 输出 #2 29820 说明/提示 【样例 1 说明】 骑士第一天收到一枚金币;第二天和第三天,每天收到两枚金币;第四、五、六天,每天收到三枚金币。因此一共收到 $1+2+2+3+3+3=14$ 枚金币。 对于 $100%$ 的数据,$1\le k\le 10^4$。 分析 我们可以采用 按层计算 的方法,在脑海里想象,每一天发的金币数可以列成以下表格: 也就是说: $ 每一层发的金币数 = 层数$ $ i = c $ 由此,我们写出程序: #include<iostream> using namespace std; int main() { int day = 0, glod = 0, tday = 0; cin >> day; for (int c = 1; c <= day; c++) { for (int i = 1; i <= c; i++) { glod += c; tday ++; if (tday == day) { break; } } if (tday == day) { break; } } cout << glod; return 0; } 完美通过! ...

三月 12, 2025 · 林墨瀚

P1011 车站 [NOIP 1998 提高组]

题目描述 火车从始发站(称为第 1 站)开出,在始发站上车的人数为 a,然后到达第 2 站,在第 2 站有人上、下车,但上、下车的人数相同,因此在第 2 站开出时(即在到达第 3 站之前)车上的人数保持为 a 人。从第 3 站起(包括第 3 站)上、下车的人数有一定规律:上车的人数都是前两站上车人数之和,而下车人数等于上一站上车人数,一直到终点站的前一站(第 n−1 站),都满足此规律。现给出的条件是:共有 n 个车站,始发站上车的人数为 a,最后一站下车的人数是 m(全部下车)。试问 x 站开出时车上的人数是多少? 输入格式 输入只有一行四个整数,分别表示始发站上车人数 a,车站数 n,终点站下车人数 m 和所求的站点编号 x。 输出格式 输出一行一个整数表示答案:从 x 站开出时车上的人数。 输入输出样例 #1 输入 #1 5 7 32 4 输出 13 说明/提示 对于全部的测试点,保证 1≤a≤20,1≤x≤n≤20,1≤m≤2×104。 问题分析 + 求解 已知信息: 发站上车人数 a 车站数 n 终点站人数 m 所求的站点编号 x 我们定义 i:表示第二站上车、下车为 i 人 根据已知信息,我们可以列出表格: 站数(x) 上车人数 下车人数 发车时的人数 1 a / a 2 i i a 3 a+i i 2a+i 4 a+2i a+i 2a+i 5 2a+3i a+2i 3a+2i 我们可以找到规律: ...

三月 6, 2025 · 林墨瀚

P1421 小玉买文具

题目 题目描述 班主任给小玉一个任务,到文具店里买尽量多的签字笔。已知一只签字笔的价格是 1 元 9 角,而班主任给小玉的钱是 a 元 b 角,小玉想知道,她最多能买多少只签字笔呢。 输入格式 输入只有一行两个整数,分别表示 a 和 b。 输出格式 输出一行一个整数,表示小玉最多能买多少只签字笔。 输入输出样例 输入 10 3 输出 5 说明/提示 数据规模与约定 对于全部的测试点,保证 0 ≤ a ≤ 10^4,0 ≤ b ≤ 9。 问题分析 无须分析。 解题 #include <iostream> using namespace std; int main() { double DanJia = 1.9; int a = 0, b = 0; cin >> a >> b; double GiveMoney = a + 0.1 * b; int GeShu = GiveMoney / DanJia; cout << GeShu; } AC,完美通过! ...

三月 4, 2025 · 林墨瀚

P5711 【深基3.例3】闰年判断

题目 题目描述 输入一个年份,判断这一年是否是闰年,如果是输出 1,否则输出 0。 1582 年以来,闰年的定义: 普通闰年:公历年份是 4 的倍数,且不是 100 的倍数的,为闰年(如 2004 年、2020 年等就是闰年)。 世纪闰年:公历年份是整百数的,必须是 400 的倍数才是闰年(如 1900 年不是闰年,2000 年是闰年)。 输入格式 输入一个正整数 n,表示年份。 输出格式 输出一行。如果输入的年份是闰年则输出 1,否则输出 0。 输入输出样例 输入输出样例 #1 输入 #1 1926 输出 #1 0 输入输出样例 #2 输入 #2 1900 输出 #2 0 输入输出样例 #3 输入 #3 2000 输出 #3 1 输入输出样例 #4 输入 #4 1996 输出 #4 1 说明/提示 数据保证,1582 ≤ n ≤ 2020 且年份为自然数。 解题 #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, 2025 · 林墨瀚

T392143 水仙花数

题目描述 在自然数中,如果一个三位数等于自身各位数字之立方和,则这个三位数就称为是水仙花数。如:153=1+125+27,所以153是一个水仙花数。求所有的水仙花数。 输入格式 无输入 输出格式 若干个空格间隔的由小到大表示的整数,每个表示一个水仙花数。 解题 是不是很熟悉?这道题就是《算法竞赛入门经典》的习题 2-1,改一个输出就行。 #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 << " "; } } } 完美通过! 本篇题解到此结束,祝各位读者早日成为神牛牪犇!

三月 4, 2025 · 林墨瀚

P1255 数楼梯

题目 题目描述 楼梯有 N 阶,上楼可以一步上一阶,也可以一步上二阶。 编一个程序,计算共有多少种不同的走法。 输入格式 一个数字,楼梯数。 输出格式 输出走的方式总数。 样例 #1 样例输入 #1 4 样例输出 #1 5 提示 对于 60% 的数据,N≤50; 对于 100% 的数据,1≤N≤5000。 问题分析 我们可以用递归角度解决: 当青蛙跳到第 n 级楼梯,可以选择: 从第 n-1 级跳到第 n 级(跳 1 级)。 从第 n-2 级跳到第 n 级(跳 2 级)。 递归关系: f(n)=f(n−1)+f(n−2) 其中,f(n) 代表跳到第 n 级楼梯的方法总数。 并且: 如果 n=0,即青蛙在第 0 级楼梯,则 f(0)=0(即什么都不做)。 如果 n=1,即青蛙跳到第 1 级楼梯,那么只能跳 1 级,则 f(1)=1。 问题的递归式: 基于以上推理,我们可以列出以下递归关系式: 解题 伪代码: F(n): 如果 n == 0: 返回1 // 起始点,不需要跳跃,只有一种方式 如果 n == 1: 返回 1 // 只有一种方式跳到第1阶 // 从n-1阶跳到n阶,或从n-2阶到n阶 返回 CountWays(n - 1) + CountWays(n - 2) Python 实现: 初版: ...

二月 1, 2025 · 林墨瀚