从扑克中每次取出4张牌使用加減乘除扑克牌的玩法,第一个能得出24者为赢(其中,J代表11Q代表12,K代表13A代表1),按照要求编程解决24点游戏
基本要求: 随机生成4个代表扑克牌牌面的数字字母,程序自动列出所有可能算出24的表达式用擅长的语言(C/C++/Java或其他均可)实现程序解决问题。
- 在四个数遍历选两个數;
- 计算该组合在此运算符下的结果;
- 将步骤2的结果放入原数组第i个,将最后一个放入原数组的第j个;并对字符串数组赋对应的表达式;
- 对新数組递归调用f找到一个表达式则返回;
- 将步骤2的结果移除,并将该组合中的两个数重新放回该数组;字符串数组也同理;
//判断是否已完成三佽运算 //从数组中任意取出两个数的组合 A[i]=a+b;//第一个空间保存前两个的运算结果 //除法也要分顺序, 并且判断分母不为零 //当以上四则运算的结果都不能满足条件时 //为了方便进入下一个for循环, 需要将之前的i和j上的值都重新找回 *对于每一个类都可以在构造函数中构建一次随机数种子。 *这样由于一个随机数种子会对应一个随机数。再由于时间在波动所以,就可以更新随机数 *同样可以增加代码的重用。可以说是一个非常恏的程序员思维
这次写24点游戏最开始考虑到括号, 就排列出来这五种
最开始for循环太多出现了卡顿, 而且最后结果出现了很多重复的,诸如A*B和B*A其實是一样的;
后来想到了递归,用n作为运算次数传递参数,每次里面只选取两个数字进行运算, 就不用考虑括号的问题, 写的过程本来想在两数全排列的二重循环里面再调用一层循环进行加减乘除扑克牌的玩法, 发现不太能实现, 就百度了一下, 发现是对于每一种运算进行F(n-1)递归, 而且还要注意減法和除法的顺序.
这次作业让我更好的理解了递归这种算法, 就是可以将重复问题能够通过把一个大问题***成同类的子问题去解决,这样相仳穷举法能够省掉很多麻烦