2011-09-24 75 views
0

我正在嘗試編碼c中的蛋白質摺疊項目。 在哪裏我會給一個長度爲3-4的字符串讓我們說BWB或BBWW ... 我必須將此字符串存儲在二維數組中,並使用此字符串打印所有可能的組合。在二維陣列中打印字符串的各種構象

如果字符串的長度是n,矩陣的長度是2n。我將第一個元素存儲在數組的中心。

我到目前爲止所嘗試的內容如下 - 我可以打印特定輸入的構造數量 - 比方說3字母字符串,它將生成12個組合。對於4它將生成36個組合。 。像這樣..

所以我的第一個字母ll在矩陣的中心,然後第二個單詞可以在任何位置 - 這一個的頂部,左側,右側,...取決於這第二個第三個可以在上,右,左或任何3個組合...

總我還得12個組合..

我已經TR滅蠅燈很多事情到現在......和任何我想是

#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 
}