我目前正在尝试编写c中的蛋白质折叠项目。 在哪里我会得到一个3-4长度的字符串,让我们说BWB或BBWW ...... 我必须将此字符串存储在二维数组中,并使用此字符串打印所有可能的组合。
如果字符串的长度为n,则矩阵的长度为2n。我将第一个元素存储在数组的中心。
到目前为止,我所尝试的内容如下─ 我能够打印特定输入的构造数量 - 比方说3字母字符串它将生成12个组合...对于4它将生成36个组合..就像这个..
所以我的第一个字母ll位于矩阵的中心,然后第二个字可以位于这一个的任何位置 - 顶部,左侧,右侧,下方......并且取决于第二个,第三个可以位于顶部,右侧,左边或任意3种组合...
总共有12种组合..
到目前为止,我尝试了很多东西......无论我尝试过什么,都是
#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
任何帮助将不胜感激!
答案 0 :(得分:0)
您正在填充数组一次,然后打印12次。大概你想用12种不同的方式填写它并打印出来。
通常,这种类型的问题是通过递归完成的:
对于重复出现的函数,您可能希望传入数组中的当前位置以及字符串中的下一个索引。像
这样的东西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
}