1. 赛事背景与题目解析
2025年粤港澳青少年信息学创新大赛作为面向小学高年级学生的编程赛事,其C++组复赛题目设计充分考虑了该年龄段学生的认知特点和编程能力。两道题目看似简单,实则蕴含了编程思维的核心要素——问题抽象能力和算法应用能力。
第一题"数字重组"考察的是基础数据处理能力。三位数的数位分离与重组是编程入门的经典题型,但题目特别强调"无前导零"这一条件,这需要选手在排序后额外处理首位为零的特殊情况。这类题目能有效检验学生对基本控制结构和数据类型转换的掌握程度。
第二题"宝石配对"则引入了简单的算法思维。通过统计正负值出现次数来计算组合数,这实际上是编程竞赛中常见的"计数问题"的简化版本。题目将抽象的数学概念具象化为宝石能量值的配对,既符合小学生的认知水平,又为后续学习更复杂的哈希统计和组合数学奠定了基础。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 第一题:数字重组详解
2.1 问题重述与分析
给定一个三位正整数,要求重新排列其数字位,组成一个无前导零的最小数字。例如:
- 输入:310
- 输出:103
这个问题的核心在于:
- 分离数字的个、十、百位
- 对三个数字进行升序排序
- 确保首位不为零的情况下组合成最小数字
2.2 完整实现代码
cpp复制#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
// 分离数位
int digits[3];
digits[0] = n / 100; // 百位
digits[1] = (n / 10) % 10; // 十位
digits[2] = n % 10; // 个位
// 排序数位
sort(digits, digits + 3);
// 处理前导零
if (digits[0] == 0) {
// 找到第一个非零数字交换到首位
for (int i = 1; i < 3; ++i) {
if (digits[i] != 0) {
