件名の説明:
-
文字列の入力は、辞書式順序で文字列の文字のすべての順列を出力します。例えば、入力文字列abcの場合は、ABCのすべての文字列、B、Cが出て配置することができ、ACB、BAC、BCA、CABおよびCBAを印刷します。
- 入力:
-
各テストケースは、一つの行を含みます。
9(おそらく繰り返し文字)以下での文字列を入力し、文字は小文字のみが含まれます。
- 出力:
-
すべての出力に対応するデータの各セットは、辞書順に配置されています。
- サンプル入力:
abc
BCA
- 出力例:
abc
acb
bac
bca
cab
cba
ABC
ACB
BAC
BCA
CAB
CBA
問題解決のアイデア:
この質問は二つの問題に注意を払う必要があります。
最初は、ある文字の繰り返し秒であり、辞書順。
繰り返し文字は辞書順に従って、このランク付けするために私たちを必要とし、我々はそれをスキップ時間の間に交換しました。
バブルソートを使用して編曲:
void bubbleSort(char *arr,int begin,int length){
int i,j;
for(i=begin;i<length;i++){
for(j=i+1;j<length;j++){
if(arr[i]>arr[j]){
swap(&arr[i],&arr[j]);
}
}
}
}
交換は、無視され、繰り返し文字交換に注意を払うときは:
void Permulation(char *arr,int k,int length){
int i;
if(k == length){
for(i=0;i<length;i++)
printf("%c",arr[i]);
printf("\n");
}else{
for(i=k;i<length;i++){
if(k != i && arr[k] == arr[i])
continue;
swap(&arr[k],&arr[i]);
bubbleSort(arr,k+1,length);
Permulation(arr,k+1,length);
bubbleSort(arr,k+1,length);
}
}
}
各交換が行われた後、一旦みなさ残りの要素が配置されています。そのような外層はCBA交換なる最後の時間後に、文字列abcとして。
このとき、配置を作り、交換タクシーの後、並べ替えを行いました。
すべてのコード:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void bubbleSort(char *arr,int begin,int length);
void swap(char *a,char *b);
void Permulation(char *arr,int k,int length);
int main(){
char arr[10];
int length;
int i;
while(gets(arr)){
length = strlen(arr);
bubbleSort(arr,0,length);
Permulation(arr,0,length);
}
return 0;
}
void Permulation(char *arr,int k,int length){
int i;
if(k == length){
for(i=0;i<length;i++)
printf("%c",arr[i]);
printf("\n");
}else{
for(i=k;i<length;i++){
if(k != i && arr[k] == arr[i])
continue;
swap(&arr[k],&arr[i]);
bubbleSort(arr,k+1,length);
Permulation(arr,k+1,length);
bubbleSort(arr,k+1,length);
}
}
}
void swap(char *a,char *b){
char c;
c = *b;
*b = *a;
*a = c;
}
void bubbleSort(char *arr,int begin,int length){
int i,j;
for(i=begin;i<length;i++){
for(j=i+1;j<length;j++){
if(arr[i]>arr[j]){
swap(&arr[i],&arr[j]);
}
}
}
}
/**************************************************************
Problem: 1369
User: xhalo
Language: C
Result: Accepted
Time:470 ms
Memory:912 kb
****************************************************************/
ます。https://my.oschina.net/u/204616/blog/545462で再現