• 跳房子 I


    题目描述


    跳房子,也叫跳飞机,是一种世界性的儿童游戏。游戏参与者需要分多个回合按顺序跳到第1格直到房子的最后一格。跳房子的过程中,可以向前跳,也可以向后跳。
    假设房子的总格数是 count,小红每回合可能连续跳的步教都放在数组stepS 中,请问数组中是否有一种步数的组合,可以让小红两个回合跳到量后一格?
    如果有,请输出索引和最小的步数组合。
    注意:
    数组中的步数可以重复,但数组中的元素不能重复使用。
    提供的数据保证存在满足题目要求的组合,且索引和最小的步数组合是唯一的。

    输入描述


    第一行输入为房子总格数 COunt,它是 int 整数类型
    第二行输入为每回合可能连续跳的步数,它是 int 整数数组类型。


    输出描述


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


    补充说明


    count ≤ 1000, 0 ≤ steps.length ≤5000, -100000000 ≤ steps ≤ 100000000

    示例1:

    输入:

    1. 8
    2. [-1,2,4,9,6]

    输出

    [-1,9]
    

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

    示例2:

    输入:

    1. 7
    2. [1,4,5,2,2]

    输出

    [5,2]

    参考C++代码 

    1. #include
    2. using namespace std;
    3. void StepHouse(vector<int> &res, int count, vector<int> steps)
    4. {
    5. int sum = INT_MAX;
    6. int l = 0, r = 0;
    7. for (int i = 0; i < steps.size(); ++i) {
    8. for (int j = i + 1; j < steps.size(); ++j) {
    9. if (i + j >= sum) {
    10. break;
    11. }
    12. if (steps[i] + steps[j] == count) {
    13. sum = i + j;
    14. res[0] = steps[i];
    15. res[1] = steps[j];
    16. }
    17. }
    18. }
    19. }
    20. int main()
    21. {
    22. int count;
    23. cin >> count;
    24. vector<int> arr;
    25. vector<int>res(2);
    26. int n = 0;
    27. while (cin >> n) {
    28. arr.emplace_back(n);
    29. if (cin.get() == '\n') break;// 遇到回车后停止输入
    30. }
    31. StepHouse(res, count, arr);
    32. cout << "[" << res[0] << ", " << res[1] << "]"<< endl;
    33. return 0;
    34. }

  • 相关阅读:
    静态库和动态库
    JavaScript基础语法
    维护积极的react native,为什么会有人造谣react native不维护了,停止维护。
    Go 1.18泛型的局限性初探
    vue中计算属性computed的特性和应用
    【第六章】集合类:List、Iterator迭代器
    【Flutter】built_value 解决 Flutter 中的不可变性问题
    SwiftUI 中的水平条形图
    Java对象的实例化过程是怎样的?
    【Fiddler】mac m1 机器上使用 fiddler 抓取接口
  • 原文地址:https://blog.csdn.net/zhendong825/article/details/134039612