1. 程式人生 > >nyoj 366 D的小L (全排列)

nyoj 366 D的小L (全排列)

stream ati 排列 str next printf 輸入 \n class

D的小L

時間限制:4000 ms | 內存限制:65535 KB 難度:2
描述
   一天TC的匡匡找ACM的小L玩三國殺,但是這會小L忙著哩,不想和匡匡玩但又怕匡匡生氣,這時小L給匡匡出了個題目想難倒匡匡(小L很D吧技術分享圖片),有一個數n(0<n<10),寫出1到n的全排列,這時匡匡有點囧了技術分享圖片,,,聰明的你能幫匡匡解圍嗎?
輸入
  第一行輸入一個數N(0<N<10),表示有N組測試數據。後面的N行輸入多組輸入數據,每組輸入數據都是一個整數x(0<x<10)
輸出
  按特定順序輸出所有組合。
  特定順序:每一個組合中的值從小到大排列,組合之間按字典序排列。
樣例輸入
  2
  2
  3
樣例輸出
  12
  21
  123
  132
  213
  231
  312
  321
/**
    分析:這道題就是求由 1--n 組成的數字的全排列
    方法:next_permutation();
    模板:
        do{
            for (int i = 0; i < n; ++ i)
                printf ("%d", A[i]);
            printf ("\n");
        } while (next_permutation(A, A + n));
*
*/

C/C++代碼實現:

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <cstdio>
#include <stack>
#include <queue>

using namespace std;

int main () {
    int T;
    scanf ("%d", &T);
    while (T --) {
        int n, X[12];
        scanf (
"%d", &n); for (int i = 0; i < n; ++ i) X[i] = i + 1; do { for (int i = 0; i < n; ++ i) printf ("%d", X[i]); printf ("\n"); } while (next_permutation (X, X + n)); } return 0; }

nyoj 366 D的小L (全排列)