【題目】
匪警請撥110,即使手機欠費也可撥通!
為了保障社會秩序,保護人民群眾生命財產安全,警察叔叔需要與罪犯鬥智鬥勇,因而需要經常性地進行體力訓練和智力訓練!
某批警察叔叔正在進行智力訓練:
1 2 3 4 5 6 7 8 9 = 110;
請看上邊的算式,為了使等式成立,需要在數字間填入加號或者減號(可以不填,但不能填入其它符號)。
之間沒有填入符號的數字組合成乙個數,例如:12+34+56+7-8+9 就是一種合格的填法;123+4+5+67-89 是另乙個可能的答案。
請你利用計算機的優勢,幫助警察叔叔快速找到所有答案。
每個答案佔一行。形如:
12+34+56+7-8+9
123+4+5+67-89
......
已知的兩個答案可以輸出,但不計分。
各個答案的前後順序不重要。
注意:請仔細除錯!您的程式只有能執行出正確結果的時候才有機會得分!
請把所有類寫在同乙個檔案中,除錯好後,存入與【考生資料夾】下對應題號的「解答.txt」中即可。
相關的工程檔案不要拷入。
請不要使用package語句。
源程式中只能出現jdk1.5中允許的語法或呼叫。不能使用1.6或更高版本。
【分析】
題目可以看成在9個數字中間填8個符號,引入#符號,作為分隔符,表示兩邊的數字需要連起來。
8個位置每個位置都可能填入三種符號:#、+、-。
遞迴遍歷所有的可能性,然後計算結果,滿足條件的算式就加入到集合中,最後列印出來。
【原始碼】
private
static hashset
sets =
newhashset
();public
static
void
main
(string[
] args)
f1(a,1)
;for
(string c : sets)
}private
static
voidf1(
char
a,int index)
//該位置可能是#,表示沒有運算子,應該連線兩端數字
a[index]
='#';f1
(a, index+2)
;//該位置可能
a[index]
='+';f1
(a, index+2)
; a[index]
='-';f1
(a, index+2)
;}private
static
voidf2(
char
a)else
if(a[i]
=='#'
)else
} list1.
add(sb.
tostring()
);//不要忘記把最後乙個數字加上
if(list1.
size()
==0|| list2.
size()
==0)//計算等式的值
int sum = integer.
valueof
(list1.
get(0)
);for(
int i =
0; i < list2.
size()
; i++)if
(list2.
get(i)
=='-')}
//滿足條件就將等式字串加入到集合中
if(sum ==
110)
sets.
add(sb2.
tostring()
);}}
【結果】
12+34+56+7-8+9
1+234-56-78+9
123-4-5+6+7-8-9
1+2+34+5+67-8+9
123+4+5+67-89
123+4-5-6-7-8+9
123-4+5-6-7+8-9
12+3+45+67-8-9
1-2+3+45-6+78-9
12-3+4-5+6+7+89
一共找到10種滿足條件的等式
java 藍橋杯 趣味算式
匪警請撥110,即使手機欠費也可撥通!為了保障社會秩序,保護人民群眾生命財產安全,警察叔叔需要與罪犯鬥智鬥勇,因而需要經常性地進行體力訓練和智力訓練!某批警察叔叔正在進行智力訓練 1 2 3 4 5 6 7 8 9 110 請看上邊的算式,為了使等式成立,需要在數字間填入加號或者減號 可以不填,但不...
藍橋杯 趣味算式填符號
匪警請撥110,即使手機欠費也可撥通!為了保障社會秩序,保護人民群眾生命財產安全,警察叔叔需要與罪犯鬥智鬥勇,因而需要經常性地進行體力訓練和智力訓練!某批警察叔叔正在進行智力訓練 1 2 3 4 5 6 7 8 9 110 請看上邊的算式,為了使等式成立,需要在數字間填入加號或者減號 可以不填,但不...
藍橋杯 神奇算式
由4個不同的數字,組成的乙個乘法算式,它們的乘積仍然由這4個數字組成。比如 6 x 210 1260 8 x 473 3784 27 x 81 2187 都符合要求。如果滿足乘法交換律的算式算作同一種情況,那麼,包含上邊已列出的3種情況,請輸出剩餘的滿足要求的算式且按照第乙個因數從小到大排列,第乙個...