#include <iostream>
using namespace std;
/*
001:阶乘
*/
int Factorial(int n)
{
if (n == 0)
{
return 1;
}
else
return Factorial(n - 1) * n;
}
/*
002:汉诺塔
*/
//void Hanoi(int n, char start, char mid, char last)
//{
// if (n == 1)
// {
// cout << start << "->" << last << endl; //如果n为1,直接移到第三盘子里面
// return;
// }
// Hanoi(n - 1,start, last, mid); //先将n-1个盘子从start移动到中间
// cout << start << "->" << last << endl; //再将那个大盘子移动到最后
// Hanoi(n - 1, mid,start ,last); //最后将n-1个盘子又从mid移动到last
// return;
//}
//
//int main()
//{
// int n;
// cout << "print some numbers" << endl;
// cin >> n;
// Hanoi(n, 'A', 'B', 'C');
// return 0;
//}
/*
003:【leetcode 51】N皇后问题
*/
//#include <iostream>
//#include <cmath>
//using namespace std;
//
//int N; //输入n,为皇后的数目
//int QueenPos[100]; //存取第i行第j列,j为数组值,i为索引值(i行皇后放在j位置)
//void NQueen(int k);
//
//void NQueen(int k) //这个函数目的:在0—k-1行皇后摆好的情况下,摆放k行以及其后的皇后
//{
// int i;
// if (k == N) //首先进行判断,k如果为N的话,表明摆好了,打印,并且退出函数
// {
// for (i = 0; i < N; i++)
// cout << QueenPos[i] + 1 << " ";
// cout << "以上。" << endl;
// return;
// }
// for (i = 0; i < N; i++) //逐个尝试第n个皇后位置
// {
// int j;
// for (j = 0; j < k; j++)
// {
// if (QueenPos[j] == i ||abs(QueenPos[j]-i)== abs(k - j))
// {
// break;
// //这里要满足两个条件:一个是行与列不能有皇后,一个是对角线不能有皇后
// //所以这里QueenPos【j】==i表示的是,i值确定,j遍历,在矩阵(伪)中找到有i的进行排除操作
// //第二个是实现对角线不应该相同,判断相同则为负。
// }
//
// }
// if (j == k)
// {
// QueenPos[k] = i;
// NQueen(k + 1);
// }
// }
//}
//
//
//int main()
//{
// cin >> N;
// NQueen(0);
// return 0;
//}
//#include<iostream>//个人不建议采用头文件,可能和定义的变量或名字起冲突,从而引起编译错误;
//#include<cstdlib>
//#include<cstdio>
//#include<cmath>
//using namespace std;
//int a[100], b[100], c[100], d[100];
a数组表示的是行;
b数组表示的是列;
c表示的是左下到右上的对角线;
d表示的是左上到右下的对角线;
//int total;//总数:记录解的总数
//int n;//输入的数,即N*N的格子,全局变量,搜索中要用
//int print()
//{
// if (total <= 6)//保证只输出前三个解,如果解超出三个就不再输出,但后面的total还需要继续叠加
// {
// for (int k = 1; k <= n; k++)
// cout << a[k] << " ";//for语句输出
// cout << endl;
// }
// total++;//total既是总数,也是前三个排列的判断
// return 0;
//
//}
//
//
//void queen(int i)//搜索与回溯主体
//{
// if (i > n)
// {
// print();//输出函数,自己写的
// return;
// }
// else
// {
// for (int j = 1; j <= n; j++)//尝试可能的位置
// {
// if ((!b[j]) && (!c[i + j]) && (!d[i - j + n]))//如果没有皇后占领,执行以下程序
// {
// a[i] = j;//标记i排是第j个
// b[j] = 1;//宣布占领纵列
// c[i + j] = 1;
// d[i - j + n] = 1;
// //宣布占领两条对角线
// queen(i + 1);//进一步搜索,下一个皇后
// b[j] = 0;
// c[i + j] = 0;
// d[i - j + n] = 0;
// //(回到上一步)清除标记
// }
// }
// }
//}
//int main()
//{
// cin >> n;//输入N*N网格,n已在全局中定义
// queen(1);//第一个皇后
// cout <<"可能的种类数为" << total;//输出可能的总数
// return 0;
//}
/*
004:【leetcode 150】逆波兰表达式问题
*/
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
double exp()
{
char s[20];
cin >> s;
switch (s[0]) {
case '-':return exp() - exp();
case '+':return exp() - exp();
case '*':return exp() * exp();
case '/':return exp() / exp();
default: return atof(s); //字符串形式转换成浮点数
break;
}
}
int main()
{
printf("%1f",exp());
return 0;
}
递归_求阶乘_汉诺塔_N皇后_逆波兰表达式求值 记录
最新推荐文章于 2024-09-08 15:12:17 发布