华为OD机试跳房子2
跳房子的过程中,如果有踩线等违规行为会结束当前回合,甚至可能倒退几步.假设房子的总格数是count.小红每回合可能连续跳的步数都放在数组steps中,请问数组中是否有一种步数的组合,可以让小红三个回合跳到最后一格?如果有,请输出索引和最小的步数组合(数据保证索引和最小的步数组合是唯一的)。注意:数组中的步数可以重复,但数组中的元素不能重复使用
输入描述:
第一行输入为房子总格数count,它是int整数类型
第二行输入为每回合可能连续跳的步数,它是int整数数组类型
输出描述
返回索引和最小的满足要求的步数组合(顺序保持steps中原有顺序)
示例
输入:
[1,4,5,2,0,2]
输出
[4,5,0]
#include <bits/stdc++.h> using namespace std; int main() { int num = 0; cin >> num; vector<int>a; vector<int>ab; int tmp = 0; while (cin >> tmp) { a.push_back(tmp); if (cin.get() == '\n') break; } int i = 0,j = 1,k = 2; while (a[i] + a[j] + a[k] != num) { k++; if (a[i] + a[j] + a[k] != num) j++; if (a[i] + a[j] + a[k] != num) i++; } if (a[i] + a[j] + a[k] == num) { cout << '['<<a[i]<<',' << a[j]<<',' << a[k]<<']'; } else if (a[i] + a[j] + a[k] > num) { return -1; } }