1. 程式人生 > >POJ1256 UVA195 UVALive5605 Anagram【全排列】

POJ1256 UVA195 UVALive5605 Anagram【全排列】

Time Limit:1000MS Memory Limit:10000K
Total Submissions:21728 Accepted:8618

Description

You are to write a program that has to generate all possible words from a given set of letters.
Example: Given the word "abc", your program should - by exploring all different combination of the three letters - output the words "abc", "acb", "bac", "bca", "cab" and "cba".
In the word taken from the input file, some letters may appear more than once. For a given word, your program should not produce the same word more than once, and the words should be output in alphabetically ascending order.

Input

The input consists of several words. The first line contains a number giving the number of words to follow. Each following line contains one word. A word consists of uppercase or lowercase letters from A to Z. Uppercase and lowercase letters are to be considered different. The length of each word is less than 13.

Output

For each word in the input, the output should contain all different words that can be generated with the letters of the given word. The words generated from the same input word should be output in alphabetically ascending order. An upper case letter goes before the corresponding lower case letter.

Sample Input

3
aAb
abc
acba

Sample Output

Aab
Aba
aAb
abA
bAa
baA
abc
acb
bac
bca
cab
cba
aabc
aacb
abac
abca
acab
acba
baac
baca
bcaa
caab
caba
cbaa

Hint

An upper case letter goes before the corresponding lower case letter.
So the right order of letters is 'A'<'a'<'B'<'b'<...<'Z'<'z'.

Source

問題簡述:(略)

問題分析:(略)

程式說明

  全排列問題用演算法庫中的置換函式next_permutation()實現是十分簡單的。

  還需要用到演算法庫中的排序函式sort()實現字串排序。進行比較時,需要按照暗示進行排序,將字元對映到整數再進行比較就簡單了。

題記:(略)

參考連結:(略)

AC的C++語言程式如下:
/* POJ1256 UVA195 UVALive5605 Anagram */

#include <iostream>
#include <algorithm>
#include <ctype.h>

using namespace std;

// 按照'A'<'a'<'B'<'b'<...<'Z'<'z'的順序排序
inline int val(char c)
{
    return isupper(c) ? (c - 'A') * 2 : (c - 'a') * 2 + 1;
}

bool cmp(const char& a, const char& b)
{
    return val(a) < val(b);
}

int main()
{
    int n;
    string s;

    cin >> n;
    while(n--) {
        cin >> s;

        sort(s.begin(), s.end(), cmp);

        do {
            cout << s << endl;
        } while(next_permutation(s.begin(), s.end(), cmp));
    }

    return 0;
}


相關推薦

POJ1256 UVA195 UVALive5605 Anagram排列

Time Limit:1000MS Memory Limit:10000K Total Submissions:21728 Accepted:8618 Description You are to write a program that has to gen

HDU1027 Ignatius and the Princess II排列

Ignatius and the Princess II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 11536 Accepted Submissi

nyoj 19 擅長排列的小明 排列(n中抽取m個數)

擅長排列的小明 時間限制:1000 ms  |  記憶體限制:65535 KB 難度:4 描述 小明十分聰明,而且十分擅長排列計算。比如給小明一個數字5,他能立刻給出1-5按字典序的全排列,如果你想為難他,在這5個數字中選出幾個數字讓他繼續全排列,那麼你就錯了,他同樣的

P1118 數字三角形楊輝三角+排列

#include<bits/stdc++.h> using namespace std; int a[20][20]; int b[20]; int c[20][20]; int cmp(int a,int b) { return a>b; } int m

龍清泉左手腕受傷未愈 不能參賽痛哭流涕c

avt vgg col xor cfa bus def otn dac 【全運】龍清泉左手腕受傷未愈 不能參賽痛哭流涕   四http://j51812.zcisa.cn/http://moaz05.zcisa.cn/http://tzv22s.zcisa.cn/http:

乾貨 5 分鐘帶你看懂 Docker !

Docker是啥? 開啟翻譯君輸入Docker 結果顯示碼頭工人,沒錯!碼頭工人搬運的是集裝箱,那麼今天要講的Docker其操作的也是集裝箱,這個集裝箱就靜態而言就是一個應用映象檔案,就動態而言,就是一個容器。蒙了吧?好吧,上圖解釋。 Docker從狹義上來講就是一個程序,

解析螢幕尺寸,解析度,畫素,PPI之間到底什麼關係?for 螢幕適配

這篇文章講的是真好,連我這樣的傻子都能看懂,解決了我的好多疑惑,下面是正文 今天我給大家來講講這幾個咱們經常打交道的詞到底啥意思,以及他們之間到底有什麼關係。這篇文章是我花了一個下午從N多篇文章裡提煉出的一個白話版,保證讓你看得懂。 咱們從手機開始說起吧。先上一張

jquery實現checkbox選功能,第二次點選按鈕,頁面無法勾選

去面試,老多人問會不會jQuery啊,會不會ExtJS啊,以前都零星使用過,是使用別人封裝好的版本,沒單獨研究過這些前端技術,閒暇之餘,先研究研究jQuery。 找了本書,做了個jQuery實現全選功能的例子,覺得程式碼邏輯上都沒有問題,第二次點選【全選】按鈕頁面就是無法勾

5972: 遞歸入門排列

ans nbsp 學習 lag amp spa include print 入門經典 題目描述 排列與組合是常用的數學方法。 先給一個正整數 ( 1 < = n < = 10 ) 例如n=3,所有組合,並且按字典序輸出: 1 2 3 1 3 2

Leetcode46. Permutations(排列)

out wap rem vat int ati swa problems pub 46. Permutations(全排列) 題目:鏈接 代碼一: class Solution { private: vector<vector<int>

演算法 in python排列

1.全排列 給定一個沒有重複數字的序列,返回其所有可能的全排列 #遞迴,取一個數放在第一個位置,然後求剩下資料的全排列,以此類推 class Solution: def permute(self, nums): """ :type nums: List

LeetCode:排列46

LeetCode:全排列【46】 題目描述 給定一個沒有重複數字的序列,返回其所有可能的全排列。 示例: 輸入: [1,2,3] 輸出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 題目分析   首先題目

LeetCode:排列II47

計算 之前 怎麽 數組 tro 描述 amp 成了 不重復 LeetCode:全排列II【47】 參考自天碼營題解:https://www.tianmaying.com/tutorial/LC47 題目描述 給定一個可包含重復數字的序列,返回所有不重復的全排列。 示例:

LeetCode 784. 字母大小寫排列

1.題目 給定一個字串S,通過將字串S中的每個字母轉變大小寫,我們可以獲得一個新的字串。返回所有可能得到的字串集合。 2.思路 遞迴思路 3.程式碼 class Solution { public: void change(vector<s

演算法基礎字串的排列演算法

題目描述 輸入一個字串,按字典序打印出該字串中字元的所有排列。例如輸入字串abc,則打印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。 輸入描述 輸入一個字串,長度不超過9(可能有字元重複),字元只包括大小寫字母。 這道題是劍指offfer中一道

ACMDFS & 排列 & 回溯

深入體會一下DFS,回溯 在一些OJ上endl和“\n”還是有區別的!!! 方法一: #include <iostream> #include <cstdio> #include <cstring> using namespace std; con

劍指offer字串的排列

題目描述 輸入一個字串,按字典序打印出該字串中字元的所有排列。例如輸入字串abc,則打印出由字元a,b,c所能排列出來的所有字串abc,acb,bac,bca,cab和cba。 輸入描述 輸入一個字串,長度不超過9(可能有字元重複),字元只包括大小寫字母。 注意有可能重

搜尋2P1706 排列問題

題目描述 輸出自然數1到n所有不重複的排列,即n的全排列,要求所產生的任一數字序列中不允許出現重複的數字。 輸入輸出格式 輸入格式:   n(1≤n≤9)   輸出格式:   由1~n組成的所有不重複的數字序列,每行一個序列。每個數字保留5個常寬。  

LeetCode#47排列II(Permutations II)

【LeetCode】#47全排列II(Permutations II) 題目描述 給定一個可包含重複數字的序列,返回所有不重複的全排列。 示例 輸入: [1,1,2] 輸出: [ [1,1,2], [1,2,1], [2,1,1] ] Description Give