N
(N = 10) 문자 A, B, ..., J가 있다고 가정합니다. S
은 순열의 인스턴스입니다. 정수를 사용하여 순열을 표현 하시겠습니까?
내가 32 비트 정수 p
에 의해 순열의 순서를 저장하고, 문자열 S
및 순서 p
사이의 변환과 정수 값을 유효성을 검사 할
int S2P(char *s) {
unsigned int p = 0;
char c;
while (c = *s++) {
c -= 'A';
p *= 10;
p += c;
}
return p;
}
char *P2S(unsigned int p, char *buf) {
char *s = buf + 10;
char used[20], *t;
int i, j, c;
strcpy(used, "ABCDEFGHIJ");
*s-- = '\0';
for (i = 1; i < 10; i++) {
*s-- = c = 'A' + (p % 10);
p /= 10;
t = strchr(used, c);
if (t)
*t = '-';
}
for (i = 0; i < 10; i++)
if (used[i] != '-')
*s = used[i];
return buf;
}
int PCheck(int p) {
char tmp[20];
int q = S2P(P2S(p, tmp));
return p == q;
}
너무 효율적이지 않습니다. 즉,
- 하나 이상의 문자를 추가 할 수 없습니다. (max (N) = 10)
P2S
에는 10 번째 문자를 찾기 위해 여분의 룩업 테이블이 사용됩니다.PCheck(int)
이 너무 느립니다.
더 좋게 만드는 방법? 직선적 인 코드가 좋습니다.
"근무하지만 버그가있다"는 것은 무엇을 의미합니까? 버그가있는 경우 작동한다고 말하지 않습니다. 코드 게시보다는 알고리즘을 설명해야한다고 생각합니다. 그러면 더 많은 사람들이 당신을 도울 수 있습니다. – IVlad