2013-07-21 6 views
2
내가 다른 운동을하고 있어요

에 루프 변환 C와 내가해야 :는 while 루프와 재귀

는 "8 개의 여왕 체스 문제에 대한 모든 솔루션을 인쇄의 수를 반환하는 재귀 함수를 작성 솔루션 및 함수 프로토 타입이 있어야합니다 : INT 기능 (무효)

내가 정적 변수로 사용하는 인수 규칙 해결하려면

.

나는 (구글 도움으로) 해냈다. 작동하지만, 그들은 for 루프를 사용할 수 없다. 그리고 마지막 두 개의 for 루프를 while 루프로 변환 할 수 없다.

그것은 나를 미치게합니다, 그것은 쉬워야합니다! 나는 여기에

가 작업 기능입니다 ... 그것은 그 혼란 그것을 재귀 생각 :

int function() 
{ 
    static int count = 0; 
    static int col = 0; 
    const int n = 8; 
    static int hist[8] = {10, 10, 10, 10, 10, 10, 10, 10}; 
    int i1 = 0; 

    if (col == n) { 
     count++; 
     while (i1++ < n) 
     { 
      putchar('0' + hist[i1-1] + 1); 
     } 
     putchar('\n'); 
    } 

    for (int i = 0; i < n; i++) { 
     int j = 0; 
     for (j = 0; j < col && !(hist[j] == i || (hist[j] - i) == col - j || -(hist[j] - i) == col - j); j++); 

     if (j < col) { 
      continue; 
     } 
     hist[col] = i; 
     col++; 
     function(); 
     col--; 
    } 
    return count; 
} 

그리고이 같은 while 루프에 마지막 두 for 루프를 변환하려고 :

int i = 0; 
while (i < n) 
{ 
    int j = 0; 
    while (j < col && !(hist[j] == i || (hist[j] - i) == col - j || -(hist[j] - i) == col - j)) 
    { 
     j++; 
    } 

    if (j < col) { 
     continue; 
    } 
    hist[col] = i; 

    col++; 
    function(); 
    col--; 
    i++; 
} 

하지만 작동하지 않습니다, 보이는 것보다 더 for 루프가 있습니까? 재귀가 처음인데 생각했지만 잘못 생각한 것 같습니다 ...

+0

'for'에서 'while'변환 부분이 나에게 맞는 것 같습니다. 그게 당신이 바꾼 유일한 것입니까? – Mahesh

+0

예, 처음 시도해도되지만 두 번째 시도는 시도 할 수 없습니다./ – ItsASecret

+0

그래서 나머지 마지막 'for' 루프 만 변경했습니다. 나는 당신이 반환 진술을 지키기를 바랍니다. – Mahesh

답변

1

코드를 실행하여 문제를 발견했습니다. 이것은 for 루프, 여러분이이 상태에서 i을 증가해야가는 continue 문이 아닌 이후 라인

if (j < col) { 
    continue; 
} 

함께.

if (j < col) { 
    i++;  // add this line 
    continue; 
} 
+0

omg 전 완전히 그것을 놓쳤습니다! 고마워요! – ItsASecret

+0

그것이 StackExchange에 관한 것입니다 :) – levengli

1

당신은

while(i++<n) 

에 처음 루프를 변경하고 그것을 잘 작동합니다.

관련 문제