オファーは、文字列(9度OJ1369)の安全性の配置を証明します

件名の説明:

 

文字列の入力は、辞書式順序で文字列の文字のすべての順列を出力します。例えば、入力文字列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で再現

おすすめ

転載: blog.csdn.net/weixin_34185364/article/details/91989687