#HDU 1716(完全配列)

問題の説明

光線と数字の列が興味を発生:
4枚のカードが大出力4ビットに小の順で必要とされる多くの異なる4桁に配置することが可能な従来の4枚のカードを、。

 

 

入力

4枚のカードが0である場合に行毎のデータの各セットは、4枚のカードの数字を表す(0 <=番号<= 9)、入力が終了します。

 

 

出力

これら4枚のカード、同じ行の千の同じ番号で構成することができるすべての4桁の出力の昇順に各カードのために、同一の行は、各桁の間の空間によって分離されています。
出力データの各セットの間に空白行は、データがバック最後のグループ空の行ありません。

 

 

サンプル入力

 

1 2 3 4 1 2 3 0 1 2 3 0 0 0 0

 

 

サンプル出力

 

2130 2301 2310 3012 3021 1320 2013 2031 2103 1032 1203 1230 1302 3112 3121 3211 1023 1321 2113 2131 2311 1132 1213 1231 1312 4231 4312 4321 1123 3421 4123 4132 4213 3142 3214 3241 3412 2341 2413 2431 3124 1432 2134 2143 2314 1234 1243 1324 1342 1423 3120 3201 3210 3102

 全配列のように、私はソースコードは、このブログの機能で直接見ることができます表示する場合:https://blog.csdn.net/weixin_43851525/article/details/90405738

主な計画は:空白行で終了していない入力が0でない場合はまず、最後のサンプルが識別子を見つける必要はありませんした後、各サンプルの空白行に注意を払う、そして、第二に、行の千の同一番号が必要ですが、これを判決後の3桁が辞書ことができ、逆の順序でない限り、最後のピット、最初の0を置くことができません!このので千の数字ではなく文字列です。

 

ACコード:

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = 10;

int p[maxn], X;

int main()
{
    while (cin >> p[0] >> p[1] >> p[2] >> p[3]) {
        if (p[0] + p[1] + p[2] + p[3] == 0) break;
        if (X) cout << endl;
        sort (p, p + 4);  //注意排序
        do {
            if (p[0] == 0) continue;
            cout << p[0] << p[1] << p[2] << p[3];
            if (p[1] >= p[2] && p[2] >= p[3]) cout << endl;
            else cout << " ";
        }
        while (next_permutation (p, p + 4));
        X++;
    }
    return 0;
}

 

おすすめ

転載: blog.csdn.net/weixin_43851525/article/details/92205983