当前位置: 首页 > news >正文

第15届省赛蓝桥杯大赛C/C++大学B组

目录

一.握手问题

1.题目讲解

2.代码实现

二.小球反弹

1.题目讲解

2.代码实现

三.好数

1.题目讲解

2.代码实现

四.R 格式

1.题目讲解

2.代码实现

五.宝石组合

1.题目讲解

2.代码实现

六.数字接龙

1.题目讲解

2.代码实现

七.拔河

1.题目讲解

2.代码实现


一.握手问题

题目链接:https://www.lanqiao.cn/problems/19695/learning/

1.题目讲解

2.代码实现

#include <iostream> using namespace std; int main() { cout << (50 * 49 - 7 * 6) / 2 << endl; return 0; }

二.小球反弹

题目链接:https://www.lanqiao.cn/problems/19732/learning/

1.题目讲解

2.代码实现

#include <iostream> #include <cmath> using namespace std; typedef long long LL; LL gcd(LL a, LL b) { return b == 0 ? a : gcd(b, a % b); } int main() { LL x = 15 * 233333, y = 17 * 343720; LL d = gcd(x, y); LL a = x / d * 2 * 343720, b = y / d * 2 * 233333; printf("%.2lf", sqrt(a * a + b * b)); return 0; }

三.好数

题目链接:https://www.lanqiao.cn/problems/19709/learning/

1.题目讲解

直接暴力就可以了

2.代码实现

#include <iostream> using namespace std; bool check(int x) { int i = 1; while(x) { if((x % 10) % 2 != i % 2) return false; x /= 10; i++; } return true; } int main() { int n; cin >> n; int ret = 0; for(int i = 1; i <= n; i++) if(check(i)) ret++; cout << ret << endl; return 0; }

四.R 格式

题目链接:https://www.lanqiao.cn/problems/19710/learning/

1.题目讲解

2.代码实现

#include <iostream> using namespace std; const int N = 1e6 + 10; int n; string d; int a[N], len, p; void mul() { // 不断乘 2 int c = 0; for(int i = 0; i < len; i++) { a[i] = a[i] * 2 + c; c = a[i] / 10; a[i] %= 10; } if(c) a[len++] = c; } int main() { cin >> n >> d; len = d.size() - 1; for(int i = 0, t = len - 1; i < d.size(); i++) { if(d[i] == '.') p = d.size() - i - 1; // 小数点后的位数 else a[t--] = d[i] - '0'; // 把浮点数逆序放在 a 数组中 } // 乘 n 次 2 for(int i = 1; i <= n; i++) mul(); // 判断四舍五入 if(a[p - 1] >= 5) { int c = 1; for(int i = p; i < len && c; i++) { a[i] = a[i] + c; c = a[i] / 10; a[i] %= 10; } if(c) a[len++] = c; } for(int i = len - 1; i >= p; i--) cout << a[i]; return 0; }

五.宝石组合

题目链接:https://www.lanqiao.cn/problems/19711/learning/

1.题目讲解

2.代码实现

#include <iostream> #include <algorithm> using namespace std; const int N = 1e5 + 10; int n, a[N], cnt[N]; void get_d(int x) { for(int i = 1; i <= x / i; i++) { if(x % i == 0) { cnt[i]++; if(i != x / i) cnt[x / i]++; } } } int main() { cin >> n; for(int i = 1; i <= n; i++) { cin >> a[i]; get_d(a[i]); // 预处理每一个数的约数 } // 找最大的公约数 int x; for(int i = 1e5; i >= 0; i--) { if(cnt[i] >= 3) { x = i; break; } } // 找出最小的三个数 sort(a + 1, a + 1 + n); for(int i = 1, sum = 0; i <= n; i++) { if(a[i] % x == 0) { cout << a[i] << " "; sum++; } if(sum == 3) break; } return 0; }

六.数字接龙

题目链接:https://www.lanqiao.cn/problems/19712/learning/

1.题目讲解

2.代码实现

#include <iostream> #include <vector> using namespace std; const int N = 15; int n, k; int g[N][N]; bool st[N][N], check[N][N][N][N]; vector<int> path; int dx[] = {-1, -1, 0, 1, 1, 1, 0, -1}; int dy[] = {0, 1, 1, 1, 0, -1, -1, -1}; bool dfs(int a, int b) { if(a == n - 1 && b == n - 1) { if(path.size() == n * n - 1) return true; else return false; } st[a][b] = true; for(int i = 0; i < 8; i++) // 保证字典序最小 { int x = a + dx[i], y = b + dy[i]; if(x < 0 || x >= n || y < 0 || y >= n || st[x][y]) continue; if((g[a][b] + 1) % k != g[x][y]) continue; if(i % 2 == 1 && (check[a][y][x][b] || check[x][b][a][y])) continue; path.push_back(i); check[a][b][x][y] = true; if(dfs(x, y)) return true; path.pop_back(); check[a][b][x][y] = false; } st[a][b] = false; return false; } int main() { cin >> n >> k; for(int i = 0; i < n; i++) for(int j = 0; j < n; j++) cin >> g[i][j]; if(!dfs(0, 0)) cout << -1 << endl; else { for(auto x : path) cout << x; } return 0; }

七.拔河

题目链接:https://www.lanqiao.cn/problems/19713/learning/

1.题目讲解

2.代码实现

#include <iostream> #include <set> using namespace std; typedef long long LL; const int N = 1e5 + 10; int n; LL a[N]; set<LL> mp; int main() { cin >> n; for(int i = 1; i <= n; i++) cin >> a[i]; LL ret = 1e9; for(int l = 2; l <= n; l++) { LL sum = 0; // 把新产生的区间和,放进 set 中 for(int i = l - 1; i >= 1; i--) { sum += a[i]; mp.insert(sum); } sum = 0; // 枚举右区间 for(int r = l; r <= n; r++) { sum += a[r]; // 在左边区域快速找出离 sum 最近的区间和 auto it = mp.lower_bound(sum); if(it != mp.end()) ret = min(ret, *it - sum); if(it != mp.begin()) { it--; ret = min(ret, sum - *it); } } } cout << ret << endl; return 0; }
http://www.jsqmd.com/news/620278/

相关文章:

  • C++跨平台性能监控实战:构建CPU、GPU、磁盘与网络一体化探针
  • nav标签适用场景是什么_导航栏语义化写法【方法】
  • 部署成本降60%,响应提速10倍:镜像视界AI视频孪生的工程化价值
  • mysql事务隔离级别切换注意事项_如何保证系统平滑过渡
  • 【传统图像分割算法】- 图像分割之自适应阈值(Adaptive Thresholding)完全解析
  • 嵌入式Linux实战:手把手教你为EC20 4G模块编译GobiNet驱动(附完整Makefile配置)
  • HY-Motion 1.0开源大模型部署教程:支持企业级3D数字人动作生成生产环境
  • 2279 上市公司跨国供应链【存续力】(Sustainability) 指标(2004.07-2026.02)
  • C++ vs .NET 数组原地反转实测:小数组 C++ 碾压,大数组 .NET 反杀?好
  • 蛋白靶点CD49e(整合素α5):细胞黏附机制与抗体药物研发技术解析
  • 《算法题讲解指南:动态规划算法--回文串问题》--35.回文子串,36. 最长回文子串,37.分割回文串 IV,38.分割回文串 II,39.最长回文子序列,40.让字符串成为回文串的最少插入次数
  • 一个拉胯的分库分表方案有多绝望?整个部门都在救火!
  • 茉莉花插件:5步掌握Zotero中文文献管理终极技巧
  • 【GUI-Agent】阶跃星辰 GUI-MCP 解读---()---GUI-MCP 整体架构炔
  • 【web服务】web服务之nginx详细配置上
  • IPD实战指南:如何运用SPAN工具精准定位高潜力市场并优化产品战略布局
  • 从“记录监控”到“空间决策”:镜像视界AI重新定义视频孪生
  • LLM推理微服务基准测试全链路指南,从Prompt扰动控制到P99延迟归因分析
  • Java项目Loom迁移避坑手册(2024生产环境血泪总结)
  • 从“虚短虚断”到闭环增益:深度解析理想运放负反馈放大电路
  • ruoyi前后端分离版本
  • ESP8266智能配网实践:从SmartConfig到密码持久化存储
  • Cadence 17.2 实战指南:从零开始创建电阻、电容与LED的原理图Symbol库
  • 5个实战项目带你玩转知识追踪数据集(附ASSISTments2015完整分析代码)
  • RAG从入门到精通:如何解决检索语义不匹配(附携程面经),看这篇就够了!
  • 密码学的数学基础3-浮点数在计算机中的的实现
  • OpenClaw监控面板:可视化SecGPT-14B安全任务执行状态
  • ONNX模型可视化指南:用Netron+C#实现模型结构解析与输入输出验证
  • 《OpenClaw (Docker手工部署版) 终极避坑与实战指南》橙
  • 阿里:利用更新方向提升大模型推理