1. 程式人生 > >警察智力訓練--藍橋杯歷年java真題(java遞迴實現eval演算法)

警察智力訓練--藍橋杯歷年java真題(java遞迴實現eval演算法)

匪警請撥110,即使手機欠費也可撥通!   

為了保障社會秩序,保護人民群眾生命財產安全,警察叔叔需要與罪犯鬥智鬥勇,因而需要經常性地進行體力訓練和智力訓練!   

某批警察叔叔正在進行智力訓練:   

1 23 4 5 6 7 8 9 = 110;   

請看上邊的算式,為了使等式成立,需要在數字間填入加號或者減號(可以不填,但不能填入其它符號)。之間沒有填入符號的數字組合成一個數,

例如:12+34+56+7-8+9 就是一種合格的填法;123+4+5+67-89是另一個可能的答案。   

請你利用計算機的優勢,幫助警察叔叔快速找到所有答案。   

每個答案佔一行。形如:12+34+56+7-8+9123+4+5+67-89......   

已知的兩個答案可以輸出,但不計分。       

各個答案的前後順序不重要。

思路:123456789,中間總共有8個可以插入的位置,其中可以插入+,-,和空;先列舉除所有可能的插入情況,再將字串轉換成算式判斷結果即可。

不過java沒有eval,不然這題就方便多了

package java歷年真題;
import java.io.*;
public class 警察智力訓練_42 {
static String []ss = {"+","-",""};
static String str = "123456789";
public static int eval(String s){
	for(int i=0;i<s.length();i++){
		if(s.charAt(i) == '+'){
			return Integer.parseInt(s.substring(0,i))+eval(s.substring(i+1)); 
		}
		else if(s.charAt(i) == '-'){
			return Integer.parseInt(s.substring(0,i))-eval(s.substring(i+1)); 
		}
	}
	return Integer.parseInt(s);
}
static void dfs(int d,int m){//d從1開始,m從1開始
	if(m>=9){
		if(eval(str) == 110){
			System.out.println(str);
		}
		return;
	}
	for(int i=0;i<3;i++){//s中的序號
		if(i!=2){
		String y = str;
		str = str.substring(0,d) + ss[i] + str.substring(d);
		d += 2;
		dfs(d,++m);
		d -= 2;
		m--;
		str = y;
		}else{
			dfs(++d,++m);
			d--;
			m--;
		}
	}
}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		dfs(1,1);
	}

}

結果:
1+2+34+5+67-8-9
1+234-56+78-9
1-2-3+45-6-78-9
12+3+45+67-8+9
12+34+56+7-8-9
12-3-4-5-6+7+89
123+4+5+67-89
123+4-5+6+7+8-9
123-4+5-6+7-8+9
123-4-5-6+7-8-9


相關推薦

警察智力訓練藍橋歷年javajava實現eval演算法

匪警請撥110,即使手機欠費也可撥通!    為了保障社會秩序,保護人民群眾生命財產安全,警察叔叔需要與罪犯鬥智鬥勇,因而需要經常性地進行體力訓練和智力訓練!    某批警察叔叔正在進行智力訓練:    1 23 4 5 6 7 8 9 = 110;    請看上邊

算法筆記_212:第七屆藍橋軟件類決賽Java語言B組

技術 emp 字符串表 求解 如果 過去 系統 多少 ann 目錄 1 憤怒小鳥 2 反幻方 3 打靶 4 路徑之謎 5 堿基 6 圓圈舞 前言:以下代碼僅供參考,若有錯誤歡迎指正哦~ 1 憤怒小鳥 憤怒小鳥 X星球憤怒的小鳥喜歡撞火車! 一根平直的鐵

2018第九屆藍橋省賽JAVA語言 C組題解答案(全)

第九屆藍橋杯省賽JAVA語言 C組題解(全) 題1 哪天返回 小明被不明勢力劫持。後被扔到x星站再無問津。小明得知每天都有飛船飛往地球,但需要108元的船票,而他卻身無分文。 他決定在x星戰打工。好心的老闆答應包食宿,第1天給他1元錢。 並

第八屆藍橋省賽

標題:日期問題 小明正在整理一批歷史文獻。這些歷史文獻中出現了很多日期。小明知道這些日期都在1960年1月1日至2059年12月31日。令小明頭疼的是,這些日期採用的格式非常不統一,有采

2015藍橋決賽 01 機器人數目java

標題:機器人數目少年宮新近郵購了小機器人配件,共有3類,其中,A類含有:8個輪子,1個感測器B類含有: 6個輪子,3個感測器C類含有:4個輪子,4個感測器他們一共訂購了100套機器人,收到了輪子600個,感測器280個。根據這些資訊請你計算:B型別機器人訂購了多少個?請直接提

藍橋-組合公式求值java

演算法提高 組合公式求值 時間限制:1.0s 記憶體限制:256.0MB 問題描述   給定n, m,求: 輸入格式

藍橋省賽】日誌統計

標題:日誌統計小明維護著一個程式設計師論壇。現在他收集了一份"點贊"日誌,日誌共有N行。其中每一行的格式是:ts id  表示在ts時刻編號id的帖子收到一個"贊"。  現在小明想統計有哪些帖子曾經是"熱帖"。如果一個帖子曾在任意一個長度為D的時間段內收到不少於K個贊,小明就

2018第九屆藍橋省賽 C語言B組 第一

標題:第幾天 2000年的1月1日,是那一年的第1天。 那麼,2000年的5月4日,是那一年的第幾天? 注意:需要提交的是一個整數,不要填寫任何多餘內容。 答案:125 可以被四百整除,所以是

2017第八屆藍橋 01 外星日曆java

標題:外星日曆某星系深處發現了文明遺蹟。他們的計數也是用十進位制。他們的文明也有日曆。日曆只有天數,沒有年、月的概念。有趣的是,他們也使用了類似“星期”的概念,只不過他們的一個星期包含了9天,為了方便,這裡分別記為: A,B,C....H,I從一些資料上看到,他們的23日是星

第七屆藍橋大賽個人賽省賽軟體類 C語言b組 (個人解題思路)

1.煤球數目有一堆煤球,堆成三角稜錐形。具體:第一層放1個,第二層3個(排列成三角形),第三層6個(排列成三角形),第四層10個(排列成三角形),....如果一共有100層,共有多少個煤球?請填表示煤球總數目的數字。注意:你提交的應該是一個整數,不要填寫任何多餘的內容或說明性

藍橋 歷屆試題 翻硬幣Java

小明正在玩一個“翻硬幣”的遊戲。 桌上放著排成一排的若干硬幣。我們用 * 表示正面,用 o 表示反面(是小寫字母,不是零)。 比如,可能情形是:**oo***oooo 如果同時翻轉左邊的兩個硬幣,則變為:oooo***oooo 現在小明的問題是:如果已知了初始狀態和要達到的目標狀態,每次只能同時翻

2018第九屆藍橋省賽 C語言B組 第六 遞增三元組

標題:遞增三元組 給定三個整數陣列 A = [A1, A2, … AN], B = [B1, B2, … BN], C = [C1, C2, … CN], 請你統計有多少個三元組(i, j,

藍橋:歷年試題PREV-54—合根植物

並查集得到各點連通性,遍歷並查集陣列計數根節點。 #include<stdio.h> #include<stdlib.h> int getf(int *array,int

藍橋:歷年試題PREV-7— 連號區間數

符合條件的序列是連續遞增數列。因此查詢所有滿足最大值最小值之差+1是數列元素個數的可能數列。 #include<stdio.h> #include<stdlib.h> in

藍橋:歷年試題PREV-42— 九宮幻方

今天訓練的一道題。。明擺著的DFS在機房將近一個小時才寫出來,還給寫錯了……(吐血),讓大一大二同學見笑了。。233333333 #include<stdio.h> #include&

藍橋:歷年試題PREV-39— 日期問題

得到輸入,列出三種日期可能,判斷每種可能是否是正常日期; 對日期進行排序; 輸出不重複的正常日期。 #include<stdio.h> #include<stdlib.h&g

藍橋:歷年試題PREV-38— 油漆面積

。。。第一個測試點的輸出是錯誤的。。!!! 第一個測試點怎麼也過不去,整了半天搞不懂哪裡錯了,只好一步一步算,發現是答案錯了。。 應該是4909,答案給的是3796;改下就全過了。 這道題

演算法訓練 傳紙條 藍橋

問題描述   小淵和小軒是好朋友也是同班同學,他們在一起總有談不完的話題。一次素質拓展活動中,班上同學安排做成一個m行n列的矩陣,而小淵和小軒被安排在矩陣對角線的兩端,因此,他們就無法直接交談了。幸運的是,他們可以通過傳紙條來進行交流。紙條要經由許多同學傳到對方手裡,小淵坐

演算法訓練 表示式計算 ——藍橋

問題描述   輸入一個只包含加減乖除和括號的合法表示式,求表示式的值。其中除表示整除。 輸入格式   輸入一行,包含一個表示式。 輸出格式   輸出這個表示式的值。 樣例輸入 1-2+3*(4-5) 樣例輸出 -4 資料規模和約定   表示式長度不超過1

藍橋:歷年試題PREV-55—小計算器

必須注意的是,計算器清零可能發生在運算指令之後,此時運算模式和歷史數值都須清空,而進位制不變! 運算數值最大值小於 2^63 ,所以儲存採用十進位制 long long int 。將輸入字串由指定進位制轉換成10進位制運算,輸出時轉換成指定進位制後輸出。 #inclu