C++ 程序在不爆炸的情况下找到将金块加载到体重秤上的顺序
假设我们有一个包含 n 个不同元素的数组 A,以及另一个数字 x。有 n 块金块。第 i 块金块的重量为 A[i]。我们将这 n 块金块逐个放入体重秤中。但这个体重秤有一个不寻常的缺陷:如果它上的总重量恰好为 x,它就会爆炸。我们必须检查是否可以在不爆炸体重秤的情况下,按照某种顺序将所有 n 块金块放入体重秤中。如果可以,找到该顺序。如果不行,则标记为“不可能”。
因此,如果输入类似于 A = [1, 2, 3, 4, 8];x = 6,则输出将为 [8, 1, 2, 3, 4],其他顺序也同样有效
步骤
要解决这个问题,我们将遵循以下步骤:
s := 0 n := size of A for initialize i := 0, when i < n, update (increase i by 1), do: s := s + A[i] if s is same as x, then: return "IMPOSSIBLE" s := 0 for initialize i := 0, when i < n, update (increase i by 1), do: s := s + A[i] if s is same as x, then: print A[i + 1], A[i] (increase i by 1) Ignore following part, skip to the next iteration print A[i]
示例
让我们看看以下实现来更好地理解:
#include <bits/stdc++.h>
using namespace std;
void solve(vector<int> A, int x) {
int s = 0;
int n = A.size();
for (int i = 0; i < n; i++) {
s += A[i];
}
if (s == x) {
cout << "IMPOSSIBLE";
return;
}
s = 0;
for (int i = 0; i < n; i++) {
s += A[i];
if (s == x) {
cout << A[i + 1] << ", " << A[i] << ", ";
i++;
continue;
}
cout << A[i] << ", ";
}
}
int main() {
vector<int> A = { 1, 2, 3, 4, 8 };
int x = 6;
solve(A, x);
}输入
{ 1, 2, 3, 4, 8 }, 6输出
1, 2, 4, 3, 8,
插播广告
数据结构
网络
RDBMS
操作系统
Java
iOS
HTML
CSS
Android
Python
C 编程
C++
C#
MongoDB
MySQL
Javascript
PHP