问题描述
如题,求大神指教。不胜感激。这个算法哪里不对,为什么运行结果有几个。或者有什么好点的算法。或者什么能直接笔算的方法吗???packageguessNumber;publicclassGuessNumber{/***@paramargs*/publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstub//循环,遇到B不知道的组合就交给A。//和的所有种可能的组合交给积,若只有一种不知道。则是Bb=newB();Aa=newA();for(inti=2;i<=49;i++){for(intj=i;j<=49;j++){if(b.unknows(i*j)){if(a.knows(j+i)){//A知道则B知道了推理if(b.knows(i*j)){System.out.print(i+"*"+j+"=");System.out.println(i*j);}}}}}System.out.println(a.knows(75));System.out.println(b.unknows(1764));}}上面主方法packageguessNumber;publicclassA{/**和给A,所有组合看B能否直接求解*有且只有一个组合是B不能直接求解的则A知道了。*/publicbooleanknows(inta){Bb=newB();intk=0;for(inti=2;i<=49;i++){for(intj=i;j<=49;j++){if(i+j==a){if(b.unknows(i*j)){k++;}}}}if(k==1)returntrue;returnfalse;}}packageguessNumber;publicclassB{/**将积传给B,B不知道是哪两个数则为真*/publicbooleanunknows(inta){intk=0;for(inti=2;i<=49;i++){for(intj=i;j<=49;j++){if(i*j==a)k++;}}if(k==1)returnfalse;returntrue;}/**A知道了则B知道了*积的所有组合看A是否知道*若A仅有一种知道,则B知道。*/publicbooleanknows(inta){AaObj=newA();intk=0;for(inti=2;i<=49;i++){for(intj=i;j<=49;j++){if(i*j==a)if(aObj.knows(i+j)){k++;}}}if(k==1)returntrue;returnfalse;}}