[C++]2-6 排列

/*
    排列(Permutation)
    用1,2,3,...,9组成3个三位数abc,def和ghi,每个数字恰好使用一次,要求abc:def:ghi = 1:2:3。
    按照"abc def ghi"的格式输出所有解。每行一个解。提示:不必太动脑筋。

    分析:
        全排列
            对于next_permutation函数,其函数原型为:
            #include <algorithm>
                bool next_permutation(iterator start,iterator end)
                当前序列不存在下一个排列时,函数返回false,否则返回true
                此外,next_permutation(node,node+n,cmp)可以对结构体num按照自定义的排序方式cmp进行排序。
*/
#include <iostream>
#include <algorithm>

using namespace std;

int main()
{
    int nums[9] = {1,2,3,4,5,6,7,8,9};
    int abc,def,ghi;
    do{
        abc = nums[0]*100 + nums[1]*10 + nums[2];
        def = nums[3]*100 + nums[4]*10 + nums[5];
        ghi = nums[6]*100 + nums[7]*10 + nums[8];
        if((ghi == 3*abc) && (def == 2*abc)){
            printf("%d%d%d %d%d%d %d%d%d\n", nums[0], nums[1], nums[2], nums[3], nums[4], nums[5], nums[6], nums[7], nums[8]);
        }
    }while(next_permutation( nums, nums + 9));
    return 0;
}

  

【参考文献】

  1.刘汝佳.算法竞赛入门经典

posted @ 2018-05-21 16:36  千千寰宇  阅读(224)  评论(0编辑  收藏  举报