1. 程式人生 > >編寫一個在1,2,…,9(順序不能變)數字之間插入+或-或什麼都不插入,使得計算結果總是100的程式,並輸出所有的可能性。

編寫一個在1,2,…,9(順序不能變)數字之間插入+或-或什麼都不插入,使得計算結果總是100的程式,並輸出所有的可能性。

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);
										}
									}			
		
	}
}