sm970124   6년 전

1번 소스는 틀렸다고 하는데 2번 소스는 맞았습니다가 뜨더라고요. 2번소스는 1번소스에서 문자열의 크기만 따로 배열에 저장해서 돌린건데 왜 1번소스가 틀렸을까요??

1.

#include<stdio.h>
#include<string.h>
long long int n,c[26],ga[11],nu=0,dab[26],max,cc[10];
char a[10][9];
void bt(int num)
{
 int i,j;
 long long int dab1=0,p;
 if (num == nu + 1)
 {
  for (i = 1; i <= n; i++)
  {
   p = 1;
   for (j = strlen(a[i])-1; j >=0; j--)
   {
    dab1 += p*dab[a[i][j] - 65];
    p = p * 10;
   }
  }
  //printf("%d\n", dab1);
  if (dab1 > max)
  {
   max = dab1;
  }
  return;
 }
 for (i = 0; i <= 9; i++)
 {
  if (cc[i] == 0)
  {
   cc[i] = 1;
   dab[ga[num]] = i;
   bt(num + 1);
   cc[i] = 0;
   dab[ga[num]] = 0;
  }
 }
}
int main()
{
 int i,j;
 scanf("%lld", &n);
 for (i = 1; i <= n; i++)
 {
  scanf("%s", a[i]);
 }
 for (i = 1; i <= n; i++)
 {
  for (j = 0; j < strlen(a[i]); j++)
  {
   if (c[a[i][j]-65] == 0)
   {
    ga[++nu] = a[i][j] - 65;
    c[a[i][j] - 65] = 1;
   }
  }
 }
 bt(1);
 printf("%lld", max);
 return 0;
}

2.

#include<stdio.h>
#include<string.h>
long long int n,c[26],ga[11],nu=0,dab[26],max,cc[10],bb[11];
char a[10][9];
void bt(int num)
{
 int i,j;
 long long int dab1=0,p;
 if (num == nu + 1)
 {
  for (i = 1; i <= n; i++)
  {
   p = 1;
   for (j = bb[i]-1; j >=0; j--)
   {
    dab1 += p*dab[a[i][j] - 65];
    p = p * 10;
   }
  }
  //printf("%d\n", dab1);
  if (dab1 > max)
  {
   max = dab1;
  }
  return;
 }
 for (i = 0; i <= 9; i++)
 {
  if (cc[i] == 0)
  {
   cc[i] = 1;
   dab[ga[num]] = i;
   bt(num + 1);
   cc[i] = 0;
   dab[ga[num]] = 0;
  }
 }
}
int main()
{
 int i,j;
 scanf("%lld", &n);
 for (i = 1; i <= n; i++)
 {
  scanf("%s", a[i]);
 }
 for (i = 1; i <= n; i++)
 {
  bb[i] = strlen(a[i]);
  for (j = 0; j < bb[i]; j++)
  {
   if (c[a[i][j]-65] == 0)
   {
    ga[++nu] = a[i][j] - 65;
    c[a[i][j] - 65] = 1;
   }
  }
 }
 bt(1);
 printf("%lld", max);
 return 0;
}

댓글을 작성하려면 로그인해야 합니다.