,计划最近增强功能以便解决数字不重复的解法。1。游戏的基本说明:大家应该都玩过这个游戏,就是用若干个10以内数字,通过加减乘除组合结果为24。2。游戏程序思路:通常用加括号的办法可以改变同一顺序的一组数字的运算先后,可是初步考虑这可是编译器级别的难题,因此我想通过组成不同排序的数字来穷尽所有的组合,这样逻辑的计算顺序是由数字的顺序决定的,要容易的多。3。主要函数介绍:,用来存储加减乘除四则运算。doubleAdd(double,double);doubleMul(double,double);doubleMin(double,double);doubleDiv(double,double);double(*Operation[4])(double,double)={Add,Min,Mul,Div}; ,其麻烦处在于每次变化一个数字就返回,我用了一个类似进位的小算法,每次第一位数总加一,到九就便为一,同时下一位数进一,如果下一位数也是九,那么就再进一位,如果最后一位也变为九了说明穷尽了,返回假。boolinputNumber(),后来结果太多改为文件输出,才加了文件参数。他又有三个内部函数。1。voidaddNumber();很简单把选定的数字组合放入数组的偶数Index位置,操作符号在奇数的Index位置。2。voidaddParenthesis();是加括号的函数,我的算法是只有当加减号在乘除号之前出现时候才加挂号。它内部又有一个移动拷贝数组的内部小函数,很普通的了。3。voiddisplaySolution(ofstream&f);原本是屏幕输出,现在改为可以同时写结果入文件。voiddisplay(eed,ofstream&f){voidaddNumber();voidaddParenthesis();voiddisplaySolution(ofstream&f);},我为了图省事,避免用树形结构,结果最后费尽心机,还是用数组实现了一个树形的存储,不过非常的笨拙。1。先把第一与第二个数的四则运算结果存入临时数组total的0到四位,然后下面的一个数字与前一个结果就是接着存下去。也就是4的前n次幂的和。2。total[second]=Operation[j-10](total[first],Operand[count+2]);这一句就是前一次的结果与下一个数字的四则运算。3。我无法解决先除后乘为整数的结果判断,。好像也还不错。if((count==Number-3)&&fabs(total[second]-24)<){writeRecord(second);result=true;}boolfindSolution(ofstream&f);,目的是根据D3的判断来倒推出各个步骤的操作符号,我用了类似辗转除法,就是类似10进制转二进制的那种,每次的余数就是操作符号的顺序数字减十(因为,为了把数字和符号同存在一个数组里,我定符号从10开始。)voidwriteRecord(intnum)4。不足之处:,各位有主意告诉我。(就是inputNumber里产生不重复数字,即不产生2,2,3,4的组合。),或剔除相似的结果。(Forgetit,itistoohard!),或者5等等,实际上我的程序是可以的,可是不知道那里有小虫子,还没有找到。。#include<iostream>#include<fstream>#include<cmath>usingnamespacestd;constintNumber=4;constintOpNum=6;constintSignNum=4;enumOp{ADD=10,MIN=11,MUL=12,DIV=13,LEFT=14,RIGHT=15};intOpCount=0;intNumCount=0;char*OpStr[OpNum]={"Addition","Minus","Multiply","Divide","Left","Right"};char*OpSign[OpNum]={
纸牌游戏 来自淘豆网m.daumloan.com转载请标明出处.