人们! 我正在寻找一些编写C ++代码的帮助。问题如下:
I have an equation x = (A-a[i]) + (B-b[j]) + (C-c[k]) + (D-d[l]) Now (i,j,k,l) can be any permutation of (0,1,2,3) (i.e. 24 possibilities).
需要检查所有24种可能性以找到x的最小值。 我怎样才能做到这一点? PS。我是C ++的新手 提前致谢
答案 0 :(得分:1)
您可以执行以下操作:
template <typename F>
auto get_permutation_min(F f, std::vector<int> args)
{
std::sort(args.begin(), args.end());
auto m = f(args);
do {
m = std::min(m, f(args));
} while (std::next_permutation(args.begin(), args.end()));
return m;
}
然后
auto m = get_permutation_min(
[&](const auto& v){
return (A - a[v[0]]) + (B - b[v[1]]) + (C - c[v[2]]) + (D - d[v[3]]);
},
{0, 1, 2, 3});
答案 1 :(得分:0)
double x = 0;
for(int i1=0;i1<4;i1++)
{
for(int i2=0;i2<4;i2++)
{
for(int i3=0;i3<4;i3++)
{
for(int i4=0;i4<4;i4++)
{
if((i1!=i2) && (i1!=i3) && (i1!=i4) && (i2!=i3) && (i2!=i4) && (i3!=i4))
{
x = (A-a[i1]) + (B-b[i2]) + (C-c[i3]) + (D-d[i4]);
cout << "value"<< x<< endl;
}
}
}
}
}