2011-09-24 60 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 
}