ぼるじょあがC/C++の宿題を片づけますYO! 21代目
■ このスレッドは過去ログ倉庫に格納されています
0263デフォルトの名無しさん
NGNGこんな感じか?
void hanoi(int n, int a, int b, int c)
{
int disk;
int cnt;
char * from = malloc(n + 1);
char * to = malloc(n + 1);
for (disk = 0; disk < n + 1; ++disk) {
from[disk] = disk % 2 == n % 2 ? b : c;
to[disk] = a;
}
for (cnt = 1; cnt <= (1 << n) - 1; ++cnt) {
int ic;
int tmp = cnt;
for (ic = 0; (tmp & 1) == 0; ++ic, tmp /= 2) {
}
if (to[ic + 1] == to[ic]) {
char next = a + b + c - to[ic] - from[ic];
from[ic] = to[ic];
to[ic] = next;
} else {
from[ic] = to[ic]
to[ic] = to[ic + 1];
}
printf("disk %d moves from %d to %d.\n", ic + 1, from[ic], to[ic]);
}
free(from);
free(to);
}
■ このスレッドは過去ログ倉庫に格納されています