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

粤港澳编程题

1 糖果

(1)考点:列表,循环

在这里插入图片描述

(2)思路

在这里插入图片描述

(3)参考答案

n = int(input())  # 4
a = list(map(int, input().split()))  # 2 5 4 7
marked = [] #记录被标记的袋子
for i in range(n):marked.append(False)# Step 1: 标记比相邻都多的袋子
for i in range(n):# 处理左邻居if i > 0:left = a[i-1]else:left = a[n-1]  # 环形数组,第一个元素的左邻居是最后一个元素# 处理右邻居if i < n-1:right = a[i+1]else:right = a[0]  # 环形数组,最后一个元素的右邻居是第一个元素if a[i] > left and a[i] > right:marked[i] = True# print(marked)  # [False, True, False, True]total_eaten = 0 #吃掉的糖果数
bucket = 0  # 桶里的糖果数
new_a = a.copy()  # 新袋子的糖果数# Step 2: 处理被标记的袋子
for i in range(n):if marked[i]:half = a[i] // 2total_eaten += halfremaining = a[i] - halfbucket += remainingnew_a[i] = 0  # 先设置为0,因为之后会重新分配else:new_a[i] = a[i]# print(new_a)  # [2, 0, 4, 0]# Step 3: 重新分配桶里的糖果
if bucket > 0:per_bag = bucket // nremainder = bucket % ntotal_eaten += remainderfor i in range(n):new_a[i] += per_bag# Step 4: 找出最大值
max_candies = max(new_a)print(total_eaten, max_candies)

C++代码:

#include <iostream>
#include <vector>using namespace std;int main() {int n;cin >> n;vector<int> a(n);for (int i = 0; i < n; ++i) {cin >> a[i];}vector<bool> marked(n, false);// Step 1: 标记比相邻都多的袋子for (int i = 0; i < n; ++i) {// 处理左邻居int left = (i > 0) ? a[i-1] : a[n-1];// 处理右邻居int right = (i < n-1) ? a[i+1] : a[0];if (a[i] > left && a[i] > right) {marked[i] = true;}}int total_eaten = 0; // 吃掉的糖果数int bucket = 0;      // 桶里的糖果数vector<int> new_a = a; // 新袋子的糖果数// Step 2: 处理被标记的袋子for (int i = 0; i < n; ++i) {if (marked[i]) {int half = a[i] / 2;total_eaten += half;int remaining = a[i] - half;bucket += remaining;new_a[i] = 0; // 先设置为0,因为之后会重新分配} else {new_a[i] = a[i];}}// Step 3: 重新分配桶里的糖果if (bucket > 0) {int per_bag = bucket / n;int remainder = bucket % n;total_eaten += remainder;for (int i = 0; i < n; ++i) {new_a[i] += per_bag;}}// Step 4: 手动查找最大值int max_candies = new_a[0]; // 假设第一个元素是最大值for (int i = 1; i < n; ++i) {if (new_a[i] > max_candies) {max_candies = new_a[i];}}cout << total_eaten << " " << max_candies << endl;return 0;
}

2 字符串

(1)考点:字符串,字典,循环嵌套

在这里插入图片描述

(2)思路

在这里插入图片描述

(3)参考答案

s = input() #'abcdbca'
n = len(s) #7
count = 0for i in range(n):freq = {}  # 用字典记录字母出现次数for j in range(i, n):# 检查相邻字母是否相同if j > i and s[j] == s[j - 1]:break  # 不满足条件3,直接跳出循环# 更新字母频率if s[j] not in freq:freq[s[j]] = 1else:freq[s[j]] +=1# 检查字母出现次数是否超过3if freq[s[j]] > 3:break  # 不满足条件2,直接跳出循环# 检查子串长度是否为奇数if (j - i + 1) % 2 == 1:count += 1print(count)

在这里插入图片描述
C++:

#include <iostream>
#include <vector>
#include <string>using namespace std;int main() {string s;cin >> s;int n = s.length();int count = 0;for (int i = 0; i < n; ++i) {vector<int> freq(26, 0); // 记录字母出现频率for (int j = i; j < n; ++j) {// 检查相邻字母是否相同if (j > i && s[j] == s[j - 1]) {break; // 不满足条件3,直接跳出内层循环}// 更新频率freq[s[j] - 'a'] += 1;// 检查频率是否超过3if (freq[s[j] - 'a'] > 3) {break; // 不满足条件2,直接跳出内层循环}// 检查长度是否为奇数if ((j - i + 1) % 2 == 1) {count += 1;}}}cout << count << endl;return 0;
}
http://www.xdnf.cn/news/553339.html

相关文章:

  • 【HTML-2】HTML 标题标签:构建网页结构的基础
  • Tomcat配置详情
  • 解码数据语言:如何优雅的进行数仓字典建设?
  • C++:迭代器
  • C++数据结构——红黑树
  • 如何使用通义灵码辅助开发鸿蒙OS - AI编程助手提升效率
  • centos7配置静态ip 网关 DNS
  • 数据实时同步:inotify + rsync 实现数据实时同步
  • 《深入理解指针数组:创建与使用指南》
  • 【C/C++】static关键字的作用
  • 计算机图形学Games101笔记--几何
  • 计算机视觉与深度学习 | matlab实现ARIMA-WOA-CNN-LSTM时间序列预测(完整源码和数据)
  • VMD查看蛋白质-配体的分子动力学模拟轨迹
  • 【Redis实战篇】达人探店
  • Golang的代码注释规范与实践
  • 机器学习第十八讲:混淆矩阵 → 诊断模型在医疗检查中的误诊情况
  • 33、魔法防御术——React 19 安全攻防实战
  • 每日算法刷题Day11 5.20:leetcode不定长滑动窗口求最长/最大6道题,结束不定长滑动窗口求最长/最大,用时1h20min
  • AMO——下层RL与上层模仿相结合的自适应运动优化:让人形行走操作(loco-manipulation)兼顾可行性和动力学约束
  • 【优秀三方库研读】在 quill 开源库中 QUILL_MAGIC_SEPARATOR 的作用是什么,解决了什么问题
  • 【爬虫】12306自动化购票
  • 【VS Code】Qt程序的调试与性能分析
  • SN生成流水号并且打乱
  • LTX-Videov本地部署教程:时空扩散+多尺度渲染,重塑AI视频研究范式
  • 第 4 章:网络与总线——CAN / Ethernet / USB-OTG
  • STM32中的ADC
  • CSS之box-sizing、图片模糊、计算盒子宽度clac、(重点含小米、进度条案例)过渡
  • 喷涂喷漆机器人详解
  • python-leetcode 68.有效的括号
  • RSA加解密实战指南:Java与JavaScript实现详解 + 在线工具推荐