N代表盘子数
要求画出如下的图
<例> N = 4的时候
01234 ..... .....
.1234 ..... ....0
..234 ....1 ....0
..234 ...01 .....
...34 ...01 ....2
..034 ....1 ....2
..034 ..... ...12
...34 ..... ..012
・・・・・
....4 .0123 .....
..... .0123 ....4
・・・・・
..012 ....3 ....4
..012 ..... ...34
・・・・・
....2 ...01 ...34
..... ...01 ..234
....0 ....1 ..234
....0 ..... .1234
..... ..... 01234
这样显示出每一步的图 最后将所有盘子移到最右侧
下面是我自己写的
但是并没有操纵字符串的bou1, bou2, bou3
只是打印出了哪个盘子往左还是往右移动了
不知道怎么在shift和hanoi的函数里面操纵字符串
求高手帮忙。。。想了2天了真的不知道该怎么办
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
void shift(int N, int d);
void hanoi(int N, int d);
void printbou(int N, char *p1, char *p2, char *p3) {
int i;
char temp[99];
for (i = 0; i < N; i++) {
printf("%c", *(p1 + i));
}
printf(" ");
for (i = 0; i < N; i++) {
printf("%c", *(p2 + i));
}
printf(" ");
for (i = 0; i < N; i++) {
printf("%c", *(p3 + i));
}
printf(" ");
printf("\n");
}
int main(int argc, char *argv[]) {
int N, i;
scanf("%d", &N);
char bou1[99], bou2[99], bou3[99];
char *p1 = bou1, *p2 = bou2, *p3 = bou3;
for (i = 0; i < N; i++) {
*(p1 + i) = '.';
*(p2 + i) = '.';
*(p3 + i) = '.';
}
for (i = 0; i < N; i++) {
*(p1 + i) = i + '0';
}
printbou(N, p1, p2, p3);
hanoi(N, 1);
return 0;
}
void shift(int N, int d) {
int i;
if (d == 1) {
// *(p + N - 1) = i + '0';
printf("disk%d moved right\n", N);
} else if (d == -1)
printf("disk%d moved left\n", N);
}
void hanoi(int N, int d) {
if (N == 0)
return;
hanoi(N - 1, -d);
shift(N, d);
hanoi(N - 1, -d);
}