汉诺塔问题:
步骤1:将圆盘1~n-1从A移动到B
步骤2:单独把圆盘n从from移动到to
步骤3:把圆盘1~n-1从B移动到C
结束条件:
圆盘只有1个,直接把这个圆盘从A移动到C即可
代码如下:
void Hanoi(int n)
{
void Process(int n, char from, char mid, char to);
if (n <= 0)
return;
Process(n, 'A', 'B', 'C');
}
void Process(int n, char from, char mid, char to)
{
if (n == 1)
{
cout << from << "->" << to<<endl;
}
else
{
Process(n - 1, from, to, mid);
Process(1, from, mid, to);
Process(n - 1, mid, from, to);
}
}
斐波那契数列
``
#include<iostream>
using namespace std;
bool g_InvalidInput = false;
long long Fibonacci(int n)
{
long long Process(int n, int* map, int lenMap);
g_InvalidInput = false;
if (n < 0)
{
g_InvalidInput = true;
return n;
}
int* map = new int[n+1]();
int ret=Process(n,map,n+1);
return ret;
}
long long Process(int n,int* map,int lenMap)
{
if (n < 2)
{
return n;
}
int res = 0;
if (map[n] != 0)
{
res = map[n] == -1 ? 0 : map[n];
}
else
{
return Process(n - 1, map, lenMap) + Process(n - 2, map, lenMap);
}
return res;
}
======
test.c
#include"Fibonacci.h"
void Test1()
{
int ret = Fibonacci(10);
cout << ret << endl;
}
int main()
{
Test1();
system("pause");
return 0;
}
全排列
#include<iostream>
using namespace std;
void FullPermutation(char arr[], int length)
{
void Process1(char arr[], int index, int length);
if (arr == NULL || length <= 0)
return;
Process1(arr, 0, length);
}
void Process1(char arr[],int index, int length)
{
if (index == length - 1)
{
static int count1 = 1;
cout << count1++ << " " arr << endl;
}
for (int i = index; i < length; ++i)
{
std::swap(arr[index], arr[i]);
Process1(arr, index + 1, length);
std::swap(arr[index], arr[i]);
}
}
#include"FullPermutation.h"
void Test1()
{
char arr[] = "122";
FullPermutation(arr, strlen(arr));
}
int main()
{
Test1();
system("pause");
return 0;
}