使用公式中的置换(C ++)

时间:2018-03-08 15:39:08

标签: c++ arrays permutation equation

人们!             我正在寻找一些编写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 ++的新手 提前致谢

2 个答案:

答案 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;
                 }

                }
              }
            }
          }