2011-09-24 10 views
0

現在、私はタンパク質フォールディングプロジェクトをcでコード化しようとしています。 ここで私は3-4の長さの文字列を与えられ、BWBまたはBBWWと言うことができます。 この文字列を2次元配列に格納し、この文字列で可能なすべての組み合わせを出力する必要があります。2次元配列の文字列の様々なコンホメーションを出力します

文字列の長さがnの場合、行列の長さは2nです。私は最初の要素を配列の中心に格納しています。

私はこれまでに次のようにしています: 特定の入力の立体構造の数を出力することができます.3つの文字列に対して12の組み合わせを生成します.4の場合、36の組み合わせが生成されます。このように..

私の第1文字は行列の中央にあります。次に、2番目の単語は、この1つの上、左、右のいずれかの位置にあります。この2番目の1/3

..私は12個の組み合わせを持っているでしょう合計で

...右、3つの組み合わせを左または任意の、一番上にすることができ、私はTRを持っています今までのIED多くのものは...と何でも私が試した私が取得しています

#include<string.h> 
#include<math.h> 
#include<stdio.h> 


main() 
{ 
    int n=3; 
    //printf("enter the number of inputs:\t"); 
    //scanf("%d",&n); 

    int i=4; 
    int temp=pow((i-1),(n-2)); 
    int comb=i*temp; 
    //printf("total number of combination is : %d",comb); 

    char str[3]="ABC"; 
    int size=2*n; 
    int p; 
    char mat[size][size]; 
    int j,k; 
    int a=size/2; 
    int b=size/2; 

    for(j=0;j<size;j++) 
    { 
     for(k=0;k<size;k++) 
     { 
      mat[j][k]='*'; 
     } 
    } 

    mat[a][b]=str[0]; 
    int q; 
    int r; 
    for(r=1;r<3;r++) 
    { 
     for(q=1;q<=4;q++) 
     { 
      switch(q) 
      { 
      case 1:a=a+1; 
      break; 
      case 2:a=a-1; 
      break; 
      case 3:b=b+1; 
      break; 
      case 4:b=b-1; 
      break; 
      } 
      mat[a][b]=str[r]; 
     } 
    } 



    for(p=0;p<comb;p++) 
    { 
     for(j=0;j<size;j++) 
     { 
      for(k=0;k<size;k++) 
      { 
       printf("%c",mat[j][k]); 
      } 
      printf("\n"); 
     } 
     printf("\n"); 
    } 

    printf("total number of combination is : %d",comb); 

} 

出力は、任意の助けが理解されるであろう

****** 
****** 
****** 
***CC* 
***C** 
****** 

****** 
****** 
****** 
***CC* 
***C** 
****** 

****** 
****** 
****** 
***CC* 
***C** 
****** 

****** 
****** 
****** 
***CC* 
***C** 
****** 

****** 
****** 
****** 
***CC* 
***C** 
****** 

****** 
****** 
****** 
***CC* 
***C** 
****** 

****** 
****** 
****** 
***CC* 
***C** 
****** 

****** 
****** 
****** 
***CC* 
***C** 
****** 

****** 
****** 
****** 
***CC* 
***C** 
****** 

****** 
****** 
****** 
***CC* 
***C** 
****** 

****** 
****** 
****** 
***CC* 
***C** 
****** 

****** 
****** 
****** 
***CC* 
***C** 
****** 

total number of combination is : 12 

です!

+1

"組み合わせ"について説明できますか?入力文字列の*置換*を作成しようとしていますか? –

答えて

0

アレイを一度塗りつぶしてから12回印刷します。おそらく、あなたは12種類の方法でそれを記入し、それぞれを印刷したいと考えています。多くの場合、この種の問題は、再帰を使って行われ

  1. 置き可能な位置にある文字列の現在の文字、それはすでに満たされている場合は位置をスキップします。
  2. これが文字列の最後の文字だった場合は、配列を出力します。それ以外の場合は、次の文字を繰り返します。
  3. 今置かれた文字を削除します。
  4. 経常機能について1

に行く、あなたはおそらく、アレイ内の現在位置、および文字列の次のインデックスを渡すことになるでしょう。何かのように

void do_next(int i, int j, int str_index) 
{ 
    if(str_index >= strlen(str)) 
    { 
     print_array(); 
     return; 
    } 

    if(arr[i+1][j] == '*') 
    { 
     arr[i+1][j] = str[str_index]; 
     do_next(i+1, j, str_index+1); 
     arr[i+1][j] = '*'; 
    } 
    // three similar blocks for the other positions 
    // don't use "else". Each block should be executed once 
}