作业1、使用递归模拟汉诺塔的移动过程
#include <stdio.h>
void move(int n,char a,char b,char c)
{
if(n==1)
{
printf(" %c-->%c\n",a,c);
return;
}
else
{
move(n-1,a,c,b);
printf(" %c-->%c\n",a,c);
move(n-1,b,a,c);
}
}
int main(int argc ,const char* argv[])
{
int n;
printf("请输入要移动的层数:");
scanf("%d",&n);
move(n,'a','b','c');
}
作业2、实现 0~9 的全排列
#include <stdio.h>
void allarrange(int arr[],int n,int m)
{
if(n == m)
{
for(int i=0; i<m; i++)
{
printf("%d ",arr[i]);
}
printf("\n");
return;
}
for(int i=n; i<m; i++)
{
int tmp = arr[i];
arr[i] = arr[n];
arr[n] = tmp; //交换所有的值到第n位置
allarrange(arr,n+1,m);
tmp = arr[i];
arr[i] = arr[n];
arr[n] = tmp; //把值交换回第n位
}
}
int main(int argc ,const char* argv[])
{
int arr[] = {0,1,2,3,4,5,6,7,8,9};
allarrange(arr,0,5); //此时是0到4全排列
}