#if 1
#include <iostream>
using namespace std;
void move(int n,char A, char B, char C)
{
if(1==n)
{
cout<<A<<"-->"<<C<<endl;
}
else
{
move(n-1, A, C, B);
cout<<A<<"-->"<<C<<endl;
move(n-1, B, A, C);
}
}
int main()
{
cout <<"please input the hanoi number:";
int num;
cin>>num;
char A='a';
char B='b';
char C='c';
move(num, A, B, C);
return 0;
}
#else
#include <iostream>
using namespace std;
int fun(int n)
{
if(n==1)
return 1;
if(n==0)
return 0;
return fun(n-1)+fun(n-2);
}
int CalAge(int n)
{
if(1==n)
{
return 10;
}
return CalAge(n-1)+2;
}
int main()
{
int i;
int a[12];
a[0]=0;
a[1]=1;
cout<<a[0]<<endl;
cout<<a[1]<<endl;
for(i=2; i<=12;i++)
{
a[i]=a[i-1]+a[i-2];
cout<<a[i]<<endl;
}
cout<<"aaa"<<endl;
cout<<fun(12)<<endl;
cout<<" age 5"<<endl;
cout<<CalAge(5)<<endl;
return 0;
}
#endif
求素数 大于1 只能被1跟本身除的数
#include <iostream>
#include <cmath>
using namespace std;
int fun(int temp)
{
for(int j=2; j<temp; j++)
// for(int j=2; j<=sqrt(temp); j++)
{
if(temp%j == 0)
{
return 0;
}
}
return 1;
}
int main()
{
int n;
cout<<"please intput n n must > 1:";
cin>>n;
int out=0;
for(int i=2;i<=n;i++)
{
if(1==fun(i))
{
out++;
if(out>10)
{
out=1;
cout<<endl;
}
cout<<i<<" ";
}
}
cout<<endl;
return 0;
}
题目二:一只青蛙一次可以跳上一级台阶,也可以跳上2级台阶,求该青蛙跳上n级台阶的共有多少种跳法。
思路:当只有一级台阶的时候,青蛙的跳法也只有一种。当有两级台阶的时候,青蛙的跳法有两种(一是:一下跳两级台阶,二是:一级一级的跳)。当有n级台阶的时候,青蛙在第一次起跳的时候只跳了一级台阶,则还剩下n-1级台阶的跳法,如果在第一次起跳的时候跳了两级台阶,则还剩下n-2级台阶的跳法。整个题目正好是一个斐波拉契数列。公式如下:
int Frog(int n)
{
if(1==n || 2==n)
{
return n;
}
return Frog(n-1)+Frog(n-2);
}
八皇后问题 回溯
#include <iostream>
using namespace std;
int ChessBoard[8][8]; /*棋盘*/
void InitsChessBorad() // 初始化
{
for(int row = 0;row<8;row++)
{
for(int column = 0; column<8; column++)
{
ChessBoard[row][column] = 0;
}
}
}
void PrintChessBoard() //打印棋盘
{
static int Num = 0;
Num = Num + 1;
cout<<"the "<<Num <<" is:"<<endl;
for(int row = 0; row<8;row++)
{
for(int column = 0; column <8; column ++)
{
if(ChessBoard[row][column])
{
cout<<"Q";
}
else
{
cout<<"+";
}
}
cout<<endl;
}
cout<<endl;
}
bool Conflicts(int row, int column) // 判断冲突
{
for(int i=1; i<8; i++)
{
if(row-i>=0 && ChessBoard[row-i][column])
{
return true;
}
if(column-i>=0 && ChessBoard[row][column-i])
{
return true;
}
if(column-i>=0 && row-i>=0 && ChessBoard[row-i][column-i])
{
return true;
}
if(row-i>=0 && column+i<8 && ChessBoard[row-i][column+i])
{
return true;
}
}
return false;
}
/* place_queen
** 放置皇后
** 第一行不需要检查,因为只有一个皇后。皇后放置的位置设置为true。
** 如果某M行的所有列放置皇后都存在互相攻击,那么需要返回到M-1行中放置皇后的位置,
** 将M-1行的皇后位置设置为false,寻找这行的下一个可以放置皇后的位置,如果存在再检查第M行可以放置皇后的位置。
** 如果不存在,则返回到第M-2行。
** 如果8个皇后成功放置完毕,则打印棋盘.
*/
void QueenPlace(int row) // 棋盘放置
{
for(int column = 0;column<8;column++)
{
ChessBoard[row][column] = 1;
if(row ==0 || !Conflicts(row, column))
{
if(row <7)
{
QueenPlace(row+1);
}
else
{
PrintChessBoard();
}
}
ChessBoard[row][column] = 0;
}
}
int main()
{
InitsChessBorad();
QueenPlace(0);
return 0;
}