Пример #1
0
int main()
{
  int i, j, k;

  for(i=0; i<8; i++)
    for(j=0; j <= (i+1)*(i+1); j++){
      parcial[0][i][j] = parcial[1][i][j] = guarda[i][j] = -1;
    }
  for(i=0; i<20; i++)
    buf[i] = 1;


  diag2 = buf + 10;

  while(scanf(" %d %d", &n, &k) && (n || k))
    {
      if(guarda[n-1][k] == -1){
	for(i=0; i <= k; i++){
	  if(parcial[0][n-1][i] == -1){
	    parcial[0][n-1][i] = resposta(-n + 1, i);
	    parcial[1][n-1][i] = resposta(-n + 2, i);
	  }
	}
	guarda[n-1][k] = 0;
	for(i=0; i <= k; i++)
	  guarda[n-1][k] += parcial[0][n-1][i] * parcial[1][n-1][k-i];
      }
      printf("%d\n", guarda[n-1][k]);
    }
  return 0;
}
Пример #2
0
int resposta(int d1, int k)
{
  int d2, l;
  int r = 0;

  if(k == 0)
    return 1;
  if(d1 >= n)
    return 0;

  for(; d1 <= n - k; d1+=2){
    if(d1 <= 0)
      l = n + d1;
    else
      l = n - d1;

    for(d2 = -l + 1; d2 < l; d2 += 2){
      if(diag2[d2]){
	diag2[d2] = 0;
	r += resposta(d1+2, k-1);
	diag2[d2] = 1;
      }
    }
  }
  return r;
}
Пример #3
0
int main()
{
    int b, i, primo;
    scanf("%d", &primo);
    if(2>primo)
    {
       b=1;


    }
    else
    {


        for(i=2;i<primo;i++)
        {

            if(primo%i==0)
            {
                b=1;
                break;

            }
            else
            {
                b=0;

            }
        }
    }
    resposta(b);
    return(0);
}
int resposta (elemento **c, char *seq1, char *seq2, char *novaseq1, char *novaseq2, int i, int j, int tamanho) {
    
    if(i == 0 && j==0) {
         return tamanho;
    }
    
    elemento per = c[i][j];
    int posicao;
    
    if(per.i == i-1 && per.j == j-1) {
             
             tamanho = resposta(c, seq1, seq2, novaseq1, novaseq2, i-1, j-1, tamanho);
             posicao = strlen(novaseq1);
             novaseq1[posicao] = seq1[j-1];
             novaseq2[posicao] = seq2[i-1];
             if (seq1[j-1] == seq2[i-1]) {
                tamanho++;
             }
             return tamanho;
    }
    if(per.i == i && per.j == j-1) {
             tamanho = resposta(c,seq1,seq2,novaseq1,novaseq2,i,j-1,tamanho);
             posicao = strlen(novaseq1);
             novaseq1[posicao] = seq1[j-1];
             novaseq2[posicao] = '-';
             
                          
             return tamanho;
    }
    tamanho = resposta(c,seq1,seq2,novaseq1,novaseq2,i-1,j,tamanho);
    posicao = strlen(novaseq1);
    novaseq1[posicao] = '-';
    novaseq2[posicao] = seq2[i-1];
             
    return tamanho;
    
    
}
int main() {
    
    elemento **mat;
    int ntestes;
    char sequencia1[100];
    char sequencia2[100];
    char novaseq1[200]= "";
    char novaseq2[200]= "";
    //tamanho = quantidade de elementos iguais
    int tamanho;
    //n = tamanho sequencia 1
    int n;
    //m = tamanho sequencia 2
    int m;
    
    //ntestes é a quantidade de testes que terei no meu programa
    
    scanf("%d", &ntestes);
    
    // esse for pega as 2 proximas sequencias e resolve o problema pra elas, e assim para todo o par de sequencias
    for(int i=0;i<ntestes;i++) {
            scanf("%s", sequencia1);
            scanf("%s", sequencia2);
            n = strlen(sequencia1);
            m = strlen(sequencia2);
            //funcao que cria a matriz
            alinhamento(sequencia1,sequencia2,&mat);
            //funcao recursiva que pega o resultado e coloca
            tamanho = resposta(mat,sequencia1,sequencia2,novaseq1,novaseq2,m,n,0);
            printf("Tamanho: %d",tamanho);
            printf("\nAlinhamento:  \n");
            printf("%s \n",novaseq1);
            printf("%s \n",novaseq2);
            strset(novaseq1,0);
            strset(novaseq2,0);
            free(&mat);
            printf("\n");
    }
    return 0;
}