版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Pecony/article/details/79769265
#include<stdio.h>
#include<iostream>
using namespace std;
void Hanoi(int n, char A, char B, char C);//5.递归汉诺塔
int Divide(int n, int m, int len);//6.整数分划
void Output(int num[], int len);
int divide[100] = {0};
int main ()
{
Hanoi(3, 'A', 'B', 'C');
cout << Divide(5, 4, 0);
}
void Hanoi(int n, char a, char b, char c)
{
if(n == 0)
return;
Hanoi(n - 1, a, c, b);
printf("remove %d from %c to %c\n", n, a, b);
Hanoi(n - 1, c, b, a);
}
int Divide(int n, int m, int len)
{
if(n < 0 && m < 0)
{
printf("error");
return 0;
}
else if(n == 1 && m > 1)
{
divide[len] = 1;
Output(divide, len + 1);
return 1;
}
else if(n >= 0 && m == 1)
{
if(n == 0)
{
Output(divide, len);
}
else
{
divide[len] = 1;
Divide(n - 1, m, len + 1);
}
return 1;
}
else if(n < m)
{
return Divide(n, n, len);
}
else if(n == m)
{
divide[len] = m;
Output(divide, len + 1);
return Divide(n, m - 1, len) + 1;
}
else
{
divide[len] = m;
return Divide(n - m, m, len + 1) + Divide(n, m - 1, len);
}
}
void Output(int num[], int len)
{
for(int i = 0; i < len; i++)
printf("%d ", num[i]);
cout << endl;
}