1339번 - 단어 수학
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;}
#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;}
댓글을 작성하려면 로그인해야 합니다.
sm970124 6년 전
1번 소스는 틀렸다고 하는데 2번 소스는 맞았습니다가 뜨더라고요. 2번소스는 1번소스에서 문자열의 크기만 따로 배열에 저장해서 돌린건데 왜 1번소스가 틀렸을까요??
1.
#include<stdio.h>
2.#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;
}
#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;
}