체스 한 플레이어는, 예를 들어 상이한 재료의 조합을 가질 수간단한 방법
가"퀸 2 루크, 2- 나이트 2 개 감독 8 졸이 + 왕이" 하나 개의 조합
플레이어가 한 감독 잃으면
:"퀸 2 루크, 2- 나이트 1 개 감독 8 졸 + 왕"폰이 경우 다른 조합을
..afterwards 인 다음 기사로 승격됩니다.
"퀸 2 루크 3 나이트 1 개 감독 7 졸 + 왕"다른 조합
OK이고, 다음의 조합은 유효하지 :
"5 개 즈 5 루크 5 기사, 주교 5 명, 심복 2 명 + 왕 "
홍보 할 폰이 부족하기 때문에. (5 퀸 = 4 개 폰 필요) (5 룩 = 3 개 폰 필요) 등 4 + 3 + 3 + 3 = 13 마리의 폰이 필요합니다. 보드에 2 개의 폰이 있기 때문에 최대 6 개의 폰이 승격 될 수 있습니다. 유효하지.
몇 가지 유효한 재료 조합이 있습니까? 다음 C 코드를 사용하여 8694 개의 조합을 계산했습니다. 질문은 :
계산하기에 더 간단하고 효율적인 알고리즘을 찾으십니까? (적은 사이클, 적은 계산, 더 명확한 코드 등) ... 또는 심지어 수학 공식?
total = 0;
for (queens=0;queens<=9;queens++)
for (rooks=0;rooks<=10;rooks++)
for (bishops=0;bishops<=10;bishops++)
for (knights=0;knights<=10;knights++)
for (pawns=0;pawns<=8;pawns++)
{
pawnsRequested = 0;
if (queens>1) pawnsRequested += queens - 1;
if (rooks>2) pawnsRequested += rooks - 2;
if (bishops>2) pawnsRequested += bishops - 2;
if (knights>2) pawnsRequested += knights - 2;
if (8-pawns < pawnsRequested) continue;
total++;
}
printf("%i\n",total);