forked from sitz/UVa-Online-Judge
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path10017.cpp
123 lines (119 loc) · 1.6 KB
/
10017.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#include <bits/stdc++.h>
using namespace std;
int pillar[3][300], n, times, num[3], i;
void hanoi(int source, int target, int temp, int disk)
{
if (!disk)
{
return;
}
hanoi(source, temp, target, disk - 1);
if (!times)
{
return;
}
--times;
pillar[target][num[target]] = pillar[source][--num[source]];
++num[target];
if (num[0])
{
printf("A=> ");
for (i = 0; i < num[0]; ++i)
{
printf(" %d", pillar[0][i]);
}
putchar('\n');
}
else
{
puts("A=>");
}
if (num[1])
{
printf("B=> ");
for (i = 0; i < num[1]; ++i)
{
printf(" %d", pillar[1][i]);
}
putchar('\n');
}
else
{
puts("B=>");
}
if (num[2])
{
printf("C=> ");
for (i = 0; i < num[2]; ++i)
{
printf(" %d", pillar[2][i]);
}
putchar('\n');
}
else
{
puts("C=>");
}
putchar('\n');
hanoi(temp, target, source, disk - 1);
}
int main()
{
int t = 0;
while (~scanf("%d %d", &n, ×))
{
if (!n && !times)
{
break;
}
printf("Problem #%d\n\n", ++t);
for (i = 0; i < n; ++i)
{
pillar[0][i] = n - i;
}
num[0] = n;
num[1] = num[2] = 0;
if (num[0])
{
printf("A=> ");
for (i = 0; i < num[0]; ++i)
{
printf(" %d", pillar[0][i]);
}
putchar('\n');
}
else
{
puts("A=>");
}
if (num[1])
{
printf("B=> ");
for (i = 0; i < num[1]; ++i)
{
printf(" %d", pillar[1][i]);
}
putchar('\n');
}
else
{
puts("B=>");
}
if (num[2])
{
printf("C=> ");
for (i = 0; i < num[2]; ++i)
{
printf(" %d", pillar[2][i]);
}
putchar('\n');
}
else
{
puts("C=>");
}
putchar('\n');
hanoi(0, 2, 1, n);
}
return 0;
}