2011-09-24 8 views
0

현재 C에서 단백질 폴딩 프로젝트를 코딩하려고합니다. 여기서 3-4 길이의 문자열을 사용하여 BWB 또는 BBWW라고 말할 수 있습니다. 이 문자열을 2 차원 배열에 저장하고이 문자열과 가능한 모든 조합을 인쇄해야합니다.2-D 배열의 문자열의 다양한 형태를 인쇄하십시오.

문자열의 길이가 n 인 경우 행렬의 길이는 2n입니다. 배열의 중심에 첫 번째 요소를 저장합니다.

내가 지금까지 시도한 내용은 다음과 같습니다. 특정 입력의 모양을 인쇄 할 수 있습니다. 3 개의 문자 문자열에 대해 12 개의 조합을 생성합니다 .4는 36 개의 조합을 생성합니다. . 이와 같이 ..

내 첫 글자가 행렬의 중심에있을 것이므로 두 번째 단어는이 위치의 맨 위, 왼쪽, 오른쪽 아래에있을 수 있으며이 두 번째 1/3에 따라 .. 총

내가 12 개 조합을 것이다 ... 위로, 오른쪽, 왼쪽 또는 3 개 조합에서 할 수 있습니다

나는 그럴 필요있다 지금까지 많은 것을 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 
} 
관련 문제