[2]递归_求阶乘_汉诺塔_N皇后_逆波兰表达式求值
#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皇后:




浙公网安备 33010602011771号