하노이탑 for문(반복문) 틀린거 알려주세요..
#include <stdio.h>
j=4; //초기 탑의 높이, 여기에서는 1~10까지만 가능... if(p=c[i], (i+j)%2) c[i]--==0 && (c[i]=2); for(n[i]--, i--;n[i]==0||(i=0);n[i--]=1);
pause; |
실행결과 cmd가 이상하게 나옵니다.
#include <stdio.h> #define NUM_DISKS 3 // 원판 개수 설정 int main() { int moves = (1 << NUM_DISKS) - 1; // 총 이동 횟수 char peg[] = {'A', 'B', 'C'}; for (int i = 1; i <= moves; i++) { int disk = __builtin_ctz(i); // 이동할 원판 (최하위 비트) int from = (disk % 2 == NUM_DISKS % 2) ? (i & i - 1) % 3 : (i | i - 1) % 3; int to = (from + 1 + (disk % 2 ? 1 : 2)) % 3; printf("%d번 원판을 %c에서 %c로 옮긴다\n", disk + 1, peg[from], peg[to]); } return 0; }
__builtin_ctz(i)
사용 (최하위 비트 위치로 원판 결정)from
과to
계산식으로 패턴화