日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

算法笔记_226:填符号凑算式(Java)

發布時間:2023/12/4 java 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法笔记_226:填符号凑算式(Java) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

1 問題描述

2 解決方案

?


1 問題描述

匪警請撥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或更高版本。

?

?

?

?


2 解決方案

1 import java.util.Stack; 2 3 public class Main { 4 public static char[] operation = {' ', '+', '-' }; 5 6 public void check(char[] A) { 7 StringBuffer s = new StringBuffer(""); 8 for(int i = 1;i <= 8;i++) { 9 s.append(i); 10 if(A[i - 1] != ' ') 11 s.append(A[i - 1]); 12 } 13 s.append(9); 14 String t = s.toString(); 15 if(t.length() == 9) 16 return; 17 Stack<Integer> r = new Stack<Integer>(); 18 Stack<Character> o = new Stack<Character>(); 19 for(int i = 0;i < t.length();i++) { 20 if(t.charAt(i) == '+' || t.charAt(i) == '-') { 21 if(r.size() == 2) { 22 int a1 = r.pop(); 23 int b1 = r.pop(); 24 char o1 = o.pop(); 25 if(o1 == '+') 26 r.push(a1 + b1); 27 else 28 r.push(b1 - a1); 29 } 30 o.push(t.charAt(i)); 31 continue; 32 } 33 int a = 0; 34 while(i < t.length() && t.charAt(i) >= '1' && t.charAt(i) <= '9') { 35 a = a * 10 + (t.charAt(i) - '0'); 36 i++; 37 } 38 i--; 39 r.push(a); 40 } 41 int a1 = r.pop(); 42 int b1 = r.pop(); 43 char o1 = o.pop(); 44 if(o1 == '+') 45 r.push(a1 + b1); 46 else 47 r.push(b1 - a1); 48 if(r.pop() == 110) 49 System.out.println(t); 50 } 51 52 public void dfs(int step, char[] A) { 53 if(step == 8) { 54 check(A); 55 } else { 56 for(int i = 0;i < 3;i++) { 57 A[step] = operation[i]; 58 dfs(step + 1, A); 59 } 60 } 61 } 62 63 public static void main(String[] args) { 64 Main test = new Main(); 65 char[] A = new char[8]; 66 test.dfs(0, A); 67 } 68 }

?

?

運行結果:

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 12+34+56+7-8+9 12+3+45+67-8-9 12-3+4-5+6+7+89 1+234-56-78+9 1+2+34+5+67-8+9 1-2+3+45-6+78-9

?

總結

以上是生活随笔為你收集整理的算法笔记_226:填符号凑算式(Java)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。