####1.汉诺塔
#include "stdafx.h"
int num=0;
int f(int n)
{
if(n==1)
return 1;
else
num=2*f(n-1)+1;
return num;
}
int main()
{
scanf("%d",&n);
f(n);
printf("num=%dn",num);
return 0;
}
####2.整数拆分
#include "stdafx.h"
int sum=1;
int f(int x,int n)
{
int i;
if(n==1)
return 1;
sum++;
for(i=1;i<=n/2;i++)
if(i>=x)
f(i,n-i);
return 1;
}
int main(int argc, char* argv[])
{ int n;
scanf("%d",&n);
f(0,n);
printf("sum=%dn",sum);
return 0;
}
3.四皇后
#include "stdafx.h"
int a[4][4];
void f(int x,int y)
{
int i,j;
for(j=0;j<4;j++)
if(j!=y)
a[x][j]=1;//将与皇后同行的禁掉
for(i=0;i<4;i++)
if(i!=x)
a[i][y]=1;//将与皇后同列的禁掉
for(i=1;x-i>=0&&y-i>=0;i++)//主对角线的禁掉
a[x-i][y-i]=1;
for(i=1;x+i<4&&y+i<4;i++)
a[x+i][y+i]=1;
for(i=1;x-i>=0&&y+i<4;i++)//主对角线的禁掉
a[x-i][y+1]=1;
for(i=1;x+i<4&&y-i>=0;i++)
a[x+i][y-i]=1;
}
int main(int argc, char* argv[])
{
int row1,row2,row3,row4;
int i,j,count=0;
for(row1=0;row1<4;row1++)
for(row2=0;row2<4;row2++)
for(row3=0;row3<4;row3++)
for(row4=0;row4<4;row4++)
{
for(i=0;i<4;i++)
for(j=0;j<4;j++)
a[i][j]=0;
a[0][row1]=2;//代表可以放皇后
f(0,row1);
if(a[1][row2]==0)
{
a[1][row2]=2;
f(1,row2);
if(a[2][row3]==0)
{
a[2][row3]=2;
f(2,row3);
if(a[3][row4]==0)
{
a[3][row4]=2;
count=count+1;
printf("%dn",count);
return 0;
}
}
}
}
}
####5.N皇后递归实现
#include "stdafx.h"
#include "math.h"
#define N 8
int count;
int x[N]={0};
void queen();
int place(int k)
{
int j;
for(j=0;j<k;j++)
{
if(abs(k-j)==abs(x[j]-x[k])||x[j]==x[k])
return 0;
}
return 1;
}
void queen(int t)
{
int i;
if(t==N)
count++;
for(i=0;i<N;i++)
{
x[t]=i;
if(place(t))
{
queen(t+1);
}
}
int main()
{
int num;
scanf("%d",&num);
queen(num);
printf("count=%dn",count);
return 0;
}
近期评论