編寫一個在1,2,…,9(順序不能變)數字之間插入+或-或什麼都不插入,使得計算結果總是100的程式,並輸出所有的可能性。
阿新 • • 發佈:2019-01-14
public class Test5{ public static void main(String[] args){ /* 編寫一個在1,2,…,9(順序不能變)數字之間插入+或-或什麼都不插入, 使得計算結果總是100的程式,並輸出所有的可能性。 例如:1 + 2 + 34 – 5 + 67 – 8 + 9 = 100。 */ show(); } public static void show(){ int qian=0,hou=0;//定義運算子連線的兩個數分別為qian,hou int ysf=0;//表示運算子 int qh=0;//標記當前的位置,是qian還是hou 0為qian 1為hou int total=0;//算式結果 int[] suan={0,0,0,0,0,0,0,0};////8個可能的運算子插入位,0表沒有,1表加法,2表減法 for(suan[0]=0; suan[0]<3; suan[0]++)//1 2間的運算子 for(suan[1]=0; suan[1]<3; suan[1]++)//2 3間的運算子 for(suan[2]=0; suan[2]<3; suan[2]++)//3 4間的運算子 for(suan[3]=0; suan[3]<3; suan[3]++)//4 5間的運算子 for(suan[4]=0; suan[4]<3; suan[4]++)//5 6間的運算子 for(suan[5]=0; suan[5]<3; suan[5]++)//6 7間的運算子 for(suan[6]=0; suan[6]<3; suan[6]++)//7 8間的運算子 for(suan[7]=0; suan[7]<3; suan[7]++){//8 9間的運算子 //重置 qian=1;//第一個數 ysf=0; qh=0; total=0; //開始運算 for(int i=0;i<8;i++){ //無運算子 if(suan[i]==0){ if(qh==0){ qian=qian*10+(i+2); } else hou=hou*10+(i+2); } //遇到了新運算子 else{ //完成前一運算子的結果,結果為qian,依然取hou if(qh==1){ total=qian+ysf*hou; qian=total; hou=i+2; } else{ qh=1; hou=i+2; } //更新運算子 if(suan[i]==1){ ysf=1; } else{ ysf=-1; } } } //完成最後一個運算 total=qian+ysf*hou; //輸出 if(total==100){ for(int i=0;i<9;i++){ System.out.print(i+1); if(i<8&&suan[i]==1) System.out.print("+"); if(i<8&&suan[i]==2) System.out.print("-"); } System.out.println("="+total); } } } }