大一新生备战蓝桥杯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;
}

六,数字接龙

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

七,爬山

八,拔河

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

相关推荐
成风6933 分钟前
c++比较与对比动态内存分配和回收运算符new,new[],delete,delete[]。
开发语言·c++
四念处茫茫9 分钟前
【C语言系列】字符函数和字符串函数
c语言·开发语言·visual studio
闪电麦坤9534 分钟前
Windows控制台函数:控制台读取输入函数ReadConsoleA()
c++·windows
我想发发发1 小时前
48. 旋转图像(C++)
开发语言·c++
绵绵细雨中的乡音1 小时前
动态规划-第2篇
c++·算法·动态规划
0wioiw02 小时前
C++基础(VScode环境安装)
开发语言·c++
念故思旧2 小时前
【最长递增子序列】【LeetCode算法】【c++】【动态规划】
c++·算法·leetcode·动态规划
沐墨专攻技术3 小时前
C语言操作符详解
c语言·算法
LK_073 小时前
【蓝桥杯—单片机】第十五届省赛真题代码题解析 | 思路整理
c语言·笔记·单片机·蓝桥杯·学习方法
李二。3 小时前
备赛蓝桥杯之第XX届职业院校组省赛第七题:Github 明星项目统计
职场和发展·蓝桥杯