P : S : this 메타 스레드에서 코드 설명에 스택 오버플로를 요청할 수도 있음을 알게되었습니다.Aristotle Number Puzzle 설명
this 사이트의 Aristotle Number 퍼즐에 대한 해결 방법을 이해하려고합니다. 나는 우리가 가우스 소거법을 사용 감소를 행 않을 때까지 점을 이해하고 다음 발견
이a = 76 - j - k - n - 2o - p - r - s
b = j + n + o
c = -38 + k + o + p + r + s
d = j + k + o
e = -38 + k + n + o + p + r
f = 38 - j - k - n - o - p
g = 38 - k - o - r
h = -38 + n + o + p + r + s
i = 38 - j - k - n - o - r
l = 38 - p - s
m = 38 - n - o - p
q = 38 - r - s
코드의 저자는 다음 계속 :
을 이제 {에서 1 크기 (7)의 각 순열을을 , 2, ..., 19}, 독립 변수에 할당하고, 종속 변수를 생성하고 솔루션을 찾을 때까지 제약 조건을 테스트합니다.
정말이 개념을 이해하지 못합니다. 특히 this C 파일에, 나는 다음과 같은 두 가지 기능을 이해하고 있지 않다 : 누군가가이 해석을 이해 나를 도울 수 있다면
bool next_permutation(void)
{
for (int x = 6; x >= 0; x--) {
indices[x]++;
if (indices[x] == 19) {
if (!x) {
return false;
}
moveback(x, 18);
indices[x] = x;
continue;
}
swap(x, indices[x]);
break;
}
j = elem[0];
k = elem[1];
n = elem[2];
o = elem[3];
p = elem[4];
r = elem[5];
s = elem[6];
return true;
}
// adds values to set
// returns true if value successfully added; false otherwise
bool add(int value)
{
if (value > 19 || value < 1) {
return false;
}
int bit = 1 << value;
if (set & bit) {
return false;
}
set |= bit;
return true;
}
나는 감사 높은 것이다. 저자는 행 축소를 위해 python 스크립트를 사용했습니다.
두 번째 함수 add는 값이 이미 세트에 있는지 확인하기 위해 비트 세트를 사용합니다. 'bit = 1 << value'는 값을 바이너리 셋트 (pos 1에서 1, pos 2에서 2, pos 3에서 3 등)로 인코딩합니다. 'set & bit'는 값이 집합에 포함되어 있으면 true를 반환합니다.이 경우 값은 추가되지 않습니다 (즉, 이미 있습니다 -> false를 반환합니다) 그렇지 않으면 집합에 추가합니다 (OR 연산'| =) – MrE
다른 함수는 인덱스를 섞어서 7 개 이상의 값을 회전시키고 끝에 도달하면 값을 교환하고 밀어냅니다. – MrE