大一新生备战蓝桥杯c/c++B组——2024年省赛真题解题+心得分享

一,握手问题

这个题用点像小学奥数,直接手算就行

答案:1204

二,小球反弹

这个题思路简单,但是运行会显示超时。在思考思考,后续补代码。

三,好数

思路一:

cpp 复制代码
#include <iostream>
using namespace std;

bool isGoodNumber(int n) {
    for(int i = 1; n > 0; i++) // 从最低位开始,i表示当前是第几位,i++位数加1
    {
        int digit = n % 10;  // 取出当前位的数字
        if ((i % 2 == 1 && digit % 2 != 1) || (i % 2 == 0 && digit % 2 != 0)) {
            return false;  // 如果当前位不满足条件,返回false
        }
        n = n / 10;  // 去掉最低位
         // 位数加1
    }
    return true;  // 所有位都满足条件,返回true
}

int main() {
    int N;
    cin >> N;

    int count = 0;
    for (int n = 1; n <= N; n++) {
        if (isGoodNumber(n)) {
            count++;  // 如果是好数,计数器加1
        }
    }

    cout << count;
    return 0;
}

思路二:

cpp 复制代码
#include <iostream>
using namespace std;

int main() {
    int N;
    cin >> N;

    int count = 0;  // 记录"好数"的数量

    for (int n = 1; n <= N; n++) {
        int temp = n;  // 使用临时变量,避免修改外层循环的 n
        bool isGood = true;  // 假设当前数字是"好数"
        int i = 1;  // 位数计数器,从最低位开始

        while (temp > 0) {
            int digit = temp % 10;  // 取出当前位的数字

            // 检查当前位是否满足条件
            if ((i % 2 == 1 && digit % 2 != 1) || (i % 2 == 0 && digit % 2 != 0)) {
                isGood = false;  // 如果某一位不满足条件,标记为不是"好数"
                break;  // 跳出内层循环
            }

            temp = temp / 10;  // 去掉最低位
            i++;  // 位数加1
        }

        if (isGood) {
            count++;  // 如果当前数字是"好数",计数器加1
        }
    }

    cout << count;  // 输出"好数"的数量
    return 0;
}

解释代码

  1. 临时变量 temp:

    • 在内层循环中,使用 temp 来保存当前正在检查的数字,避免修改外层循环的 n。
  2. 标志变量 isGood:

    • 初始值为 true,假设当前数字是"好数"。

    • 如果某一位不满足条件,将 isGood 设置为 false 并跳出内层循环。

  3. 位数计数器 i:

    • 从最低位开始,逐位检查数字的每一位是否满足"好数"的条件。
  4. 条件判断:

    • 如果当前位是奇数位(i % 2 == 1),则检查数字是否为奇数(digit % 2 == 1)。

    • 如果当前位是偶数位(i % 2 == 0),则检查数字是否为偶数(digit % 2 == 0)。

  5. 计数:

    • 如果当前数字是"好数",则增加计数器 count。

四,R格式

思路:

cpp 复制代码
#include <iostream>   // 用于输入输出操作
#include <cmath>      // 提供pow()和round()数学函数
using namespace std;

int main() {
    int n;            // 转换参数n,必须是整数
    double d;         // 待转换的浮点数d,题目保证d>0
    
    // 输入处理:按顺序读取整数n和浮点数d
    cin >> n >> d;    // 示例输入:3 9.14
    
    // 计算 d * 2^n(使用pow函数计算2的n次方)
    double m = d * pow(2, n); // 示例计算:9.14 * 8 = 73.12
    
    // 四舍五入到最近的整数,使用long long避免溢出
    long long ans = round(m); // 示例结果:round(73.12) = 73
    
    // 输出最终结果
    cout << ans << endl; // 正确输出应为整数73
    
    return 0;
}

这个代码只通过了50%,我还没找到问题出在哪。

补充:C++数学库常用函数

  1. 绝对值函数用abs()函数实现
  2. 四舍五入操作用round()函数实现
  3. 计算平方根用sqrt()函数实现
  4. 计算幂次方用pow()函数实现

五,宝石组合

cpp 复制代码
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;

const int N = 1e5 + 1; //定义一个常数 N,,表示数组大小的上线为100001
int s[N]; //定义整数数组s,用于存储输入的宝石的闪亮度
int n; //存储宝石的数量
vector<int> d[N]; 

int main() {
    cin >> n;
//遍历0到n-1,读取宝石的闪亮度,存储到数组s中
    for (int i = 0; i < n; i++) {
        cin >> s[i];
    }
    sort(s, s + n);//对数组s中的宝石闪亮度进行升序排序
//找出数组s中每个元素的约数,将具有相同约数的数组元素vector数组 d中
    for (int i = 0; i < n; i++) {
        for (int j = 1; j <= sqrt(s[i]); j++) {
            if (s[i] % j == 0) {
                d[j].push_back(s[i]);
                if (s[i] / j != j) {
                    d[s[i] / j].push_back(s[i]);
                }
            }
        }
    }
//在存储具有相同约数的宝石闪亮度的vector数组d中,寻找第一个元素个数大于等于3的
    for (int i = N - 1; i >= 0; i--) {
        if (d[i].size() >= 3) {
            cout << d[i][0];
            for (int j = 1; j < 3; j++) {
                cout << " " << d[i][j];
            }
            break;
        }
    }
    return 0;
}

六,数字接龙

这道题主要用到矩阵,我还没学,这周会继续补充。

七,爬山

八,拔河

最后两题有一点思路,但没办法完全写出来,后续会补。

相关推荐
程序猿编码21 分钟前
工业视觉多任务方案:可编程梯度信息视觉框架,训练评估 + C++ 部署完整实战
开发语言·c++·视觉·推理引擎
水饺编程1 小时前
第1章,了解乌班图环境,使用浏览器和邮箱
c语言·汇编·ubuntu
朝朝辞暮i2 小时前
C++ 第 21 课:struct —— 把一组相关数据打包在一起
开发语言·c++·算法
SHARK_pssm2 小时前
【C++——类和对象(下)】
开发语言·c++·经验分享·笔记
Escalating_xu2 小时前
【C 语言】操作符详解(下):逗号、下标、结构体、类型转换与表达式求值
c语言
汉克老师3 小时前
GESP2026年9月认证C++二级( 第一部分选择题(1~7题)精讲
c++·gesp·小学生·学c++编程
沫璃染墨3 小时前
《从零入门Linux系统篇(五十四):线程篇·七——互斥锁底层原理:从原子交换到线程竞争与锁实现》
linux·运维·服务器·开发语言·c++·驱动开发·系统架构
晓蛋4 小时前
C语言条件编译精讲
c语言·条件编译·宏定义·代码移植·预处理程序
ggaofeng5 小时前
Ctrl+C结束进程是如何实现的
服务器·c语言·网络
可乐ea5 小时前
GitHub Security Lab 开源 Fuzzing Taskflow:让 LLM 智能体自己跑完 C/C++ 模糊测试
jvm·c++·github·模糊测试·mcp·代码agent·智能体自动化