参考的是蓝桥云课十四天的那个题单,不知道我发这个有没有问题,如果有问题找我我立马删文。(参考蓝桥云课里边的题单,跟着大佬走,应该是没错滴,加油加油)
一、握手问题
#include <iostream>
using namespace std;
int main()
{// 请在此输入您的代码//现把这七个人排除在外的话,有43个人int a=43;int res=43*(43-1)/2;cout<<res+7*43<<'\n';return 0;
}
二、门牌问题
#include <iostream>
using namespace std;
int main()
{// 请在此输入您的代码//1到2020,2出现了几次int res=0;for(int i=1;i<=2020;i++){int t=i;while(t>0){if(t%10==2)res++;t=t/10;}}cout<<res<<'\n';return 0;
}
三、(数学几何?)小球反弹【重点理解】
(重点理解的原因是我刚开始不太会,记下来下次再看)
参考蓝桥云课题解:
#include <bits/stdc++.h>
using namespace std;int main(){long long t = 1, x = 343720, y = 233333;while(1){if((15 * t) % x == 0 && (17 * t) % y == 0) break;t++;}printf("%.2f", 2 * sqrt(15 * 15 * t * t + 17 * 17 * t * t));return 0;
}
非常巧妙,向大佬学习
解析
1. 变量初始化
`t`: 表示小球移动的步数,初始值为1。`x = 343720`: 矩形的宽度。
`y = 233333`: 矩形的高度。2. 寻找最小步数 `t`
while(1){if((15 * t) % x == 0 && (17 * t) % y == 0) break;t++; }
小球每次向右移动15个单位,向上移动17个单位。
要使小球回到起点,必须满足:
- 水平方向的总移动距离 `15 * t` 是矩形宽度 `x` 的整数倍。
- 垂直方向的总移动距离 `17 * t` 是矩形高度 `y` 的整数倍。
因此,`t` 必须是 `x/15` 和 `y/17` 的最小公倍数(LCM)。3. 计算总距离
printf("%.2f", 2 * sqrt(15 * 15 * t * t + 17 * 17 * t * t));
小球移动的总距离可以通过勾股定理计算:
- 水平距离:`15 * t`
- 垂直距离:`17 * t`
- 总距离:`sqrt((15 * t)^2 + (17 * t)^2)`
- 由于小球最终回到起点,路径是往返的,因此总距离需要乘以2。
四、(日期问题)艺术与篮球
#include <bits/stdc++.h> // 包含所有标准库头文件(竞赛编程常用写法)
using namespace std;// 特殊数值映射表:索引0-9分别对应某种特征值(如可能代表笔画数或其他编码)
int bh[] = {13,1,2,3,5,4,4,2,2,2}; // 注意:原代码初始化语法有误,已修正为单层花括号
// 月份天数表(索引0占位,1-12对应各月份天数)
int mon[] = {0,31,28,31,30,31,30,31,31,30,31,30,31}; // 闰年判断函数
bool run(int year) {return (year%400==0 || (year%4==0 && year%100!=0)); // 能被400整除 或 能被4整除但不能被100整除
}void solve() {/* 功能:统计2000年1月1日到2024年4月13日之间,日期各位数字对应特征值之和超过50的天数 */int sum = 0; // 单日特征值累加器 int res = 0; // 结果计数器 // 遍历目标时间范围:2000-2024年 for(int year = 2000; year <= 2024; year++) {// 动态设置二月天数(注意mon[[2]()] 的修改会影响后续计算)mon[[2]()] = run(year) ? 29 : 28; // 简化写法替代原if-else // 遍历12个月份for(int month = 1; month <= 12; month++) {// 遍历当月每一天(天数由mon[month]动态决定)for(int day = 1; day <= mon[month]; day++) {// 分解日期数字:年(y1-y4)、月(m1-m2)、日(d1-d2)int y1 = year/1000; // 年的千位数字 int y2 = year/100%10; // 年的百位数字 int y3 = year/10%10; // 年的十位数字 int y4 = year%10; // 年的个位数字 int m1 = month/10; // 月的十位数字(1-9月时为0)int m2 = month%10; // 月的个位数字 int d1 = day/10; // 日的十位数字(1-9日时为0)int d2 = day%10; // 日的个位数字 // 计算特征值总和(各数字对应bh数组值的累加)sum = bh[y1] + bh[y2] + bh[y3] + bh[y4] + bh[m1] + bh[m2] + bh[d1] + bh[d2];// 判断是否满足条件 if(sum > 50) res++; // 特征值总和超过50则计数 // 终止条件:到达2024年4月13日时输出结果 if(year == 2024 && month == 4 && day == 13) {cout << "目标天数:" << res << '\n';return; // 直接结束函数执行 }}}}
}int main() {solve();return 0;
}