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

华为OD机试:跳房子I (E卷、C++)

华为OD机试(E卷+D卷+C卷)最新题库【超值优惠】Java/Python/C++合集

在这里插入图片描述

题目描述

跳房子,也叫跳飞机,是一种世界性的儿童游戏。

游戏参与者需要分多个回合按顺序跳到第1格直到房子的最后一格。跳房子的过程中,可以向前跳,也可以向后跳。

假设房子的总格数是count、小红每回合可能连续跳的步数都放在数组steps中,请问数组中是否有一种步数的组合,可以让小红两个回合跳到最后一格?如果有,请输出索引和最小的步数组合。

注意:数组中的步数可以重复,但数组中的元素不能重复使用。提供的数据保证存在满足题目要求的组合,且索引和最小的步数组合是唯一的。

输入描述

第一行输入为每回合可能连续跳的步数,它是int整数数组类型。实际字符串中整数与逗号间可能存在空格。

第二行输入为房子总格数count,它是int整数类型

输出描述

返回索引和最小的满足要求的步数组合(顺序保持steps中原有顺序)

示例1

输入:
[1,4,5,2,2]
7

输出:
[5, 2]

示例2

输入:
[-1,2,4,9,6]
8

输出:
[-1, 9]

说明:
此样例有多种组合满足两回合跳到最后,比如:[-1,9],[2,6],其中[-1,9]的索引和为0+3=3,[2,6]的索和为1+4=5,所以索引和最小的步数组合[-1,9]

C++

#include <bits/stdc++.h>

using namespace std;

// 解析输入
vector<int> parseSteps(const string &line) {
    vector<int> steps;
    stringstream ss(line.substr(1, line.size() - 2)); // 去掉方括号
    string num;
    // 按照逗号分割并读取每个数字
    while (getline(ss, num, ',')) {
        steps.push_back(stoi(num));
    }
    return steps;
}

/**
 * @author code5bug
 */
int main() {

    string line;
    getline(cin, line);
    vector<int> steps = parseSteps(line);

    // 房子总格数
    int count;
    cin >> count;

    string ans = "No solution";
    size_t minIndexSum = SIZE_MAX;  // 使用 SIZE_MAX 表示没有找到组合
    for (size_t i = 0; i < steps.size(); i++) {
        for (size_t j = i + 1; j < steps.size(); j++) {
            // 找到可以跳到最后一格索引和更小的组合
            if (steps[i] + steps[j] == count && i + j < minIndexSum) {
                minIndexSum = i + j;
                ans = "[" + to_string(steps[i]) + "," + to_string(steps[j]) + "]";
            }
        }
    }

    cout << ans << endl;

    return 0;
}

题解分析

这道题目是一个典型的组合问题,要求在给定的步数数组 steps 中找到两步的组合,使得跳到最后一格总共的步数恰好等于 count。并且,要求返回的是这两个步数的组合,同时保证其索引和最小。

可以将这道题归类为“暴力枚举 + 条件判断”问题。通过遍历所有可能的两个步数组合,计算每个组合的和,如果满足条件(即和等于 count),则进一步比较它们的索引和,更新答案。

解题思路

  1. 输入解析:将输入的字符串(如 [1, 4, 5, 2, 2])解析成一个整数数组 steps
  2. 暴力枚举:使用两个嵌套的循环来枚举所有的步数组合。在内层循环中,检查两个步数之和是否等于 count
  3. 条件判断:如果符合条件(两步之和等于 count),进一步判断其索引和是否最小。如果是,更新答案。
  4. 返回结果:最后输出符合条件的步数组合,并按照题目要求的格式返回。

整理题解不易, 如果有帮助到您,请给点个赞 ‍❤️‍ 和收藏 ⭐,让更多的人看到。🙏🙏🙏

相关文章:

  • DeepSeek集成IT技术开发方向全景解读:重构智能开发新范式
  • 【学习】软件测试中的因果图法介绍
  • 深度学习训练camp:第R4周: Pytorch实现:LSTM-火灾温度预测
  • 编程学习-电子书
  • Fetch 是用于发起HTTP请求的API body 部分
  • 【SQLI】sqlmap测试过滤规则和tamper有效性的方法
  • 【MySQL】:四大排名函数
  • C++蓝桥杯基础篇(五)
  • 003 SpringBoot集成Kafka操作
  • 单细胞肿瘤细胞识别机器学习研究
  • 动态数据表格:基于 PrimeFaces 的运行时列选择实现
  • 【react】TypeScript在react中的使用
  • ArcGIS JS API之ExtrudeSymbol3DLayer实现白膜效果
  • Java23种设计模式案例
  • 蓝桥杯 5.字符串
  • 【大数据】LSM树,专为海量数据读写而生的数据结构
  • MyBatis-Plus 核心设计原理
  • 基于springboot+vue的拼夕夕商城
  • LeetCode 1472.设计浏览器历史记录:一个数组完成模拟,单次操作均O(1)
  • 如何看到 git 上打 tag 的时间
  • 个人公司网站建设/百度最容易收录的网站
  • 厦门成交型网站建设公司/抖音关键词排名查询工具
  • 宿迁沭阳网站建设/网推一手单渠道
  • css网站开发实录/广告联盟点击赚钱平台
  • 国外素材设计欣赏网站/百度教育
  • 重庆网站建设公司魁网/武汉seo关键词排名优化