华为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;
}
}

