枚舉算法

枚舉法的本質(zhì)就是從所有候選答案中搜索正確的解旅掂,使用該算法需要滿足兩個條件:

  1. 可預(yù)先確定候選答案的數(shù)量烘豹。
  2. 候選答案的范圍在求解之前必須有一個確定的集合凭豪。

填數(shù)游戲 (即 ABCDE * A = EEEEEE)

每個字母表示從0~9的一個整數(shù)汁蝶,且不同字母之間代表的整數(shù)是不同的隐锭,要求找出這些字母表示的整數(shù)窃躲,使得算式成立。
這種類型的題目有兩個特點:

  1. 無規(guī)律性钦睡,也就是我們沒有辦法按照一定的規(guī)律從眾多的候選答案中找到正解蒂窒。
  2. 有窮性,也就是說這種題目在計算量上總會有一個上界荞怒,要么在上界范圍內(nèi)即可得出正解洒琢,要么不存在正解。
字母 變量 變量范圍
A i 1-9
B j 0-9
C k 0-9
D l 0-9
E r 1-9

然后窮舉所有可能性褐桌,直到滿足條件為止衰抑。

public class FindCalu {
    public static void main(String[] args) {
        for(int i=1;i<=9;i++) {
            for(int j=0;j<=9;j++) {
                for(int k=0;k<=9;k++) {
                    for(int l=0;l<=9;l++) {
                        for(int r=0;r<=9;r++) {
                            //計算的時候記得要用long型
                            long mul=i*10000+j*1000+k*100+l*10+r;
                            long res=r*111111;
                            if(mul*(long)i==res) {
                                System.out.println(mul+"*"+i+"="+res);
                            }
                        }
                    }
                }
            }
        }
    }
}

填運算符

5 5 5 5 5=5 (中間的空間填的是運算符)。
即通過加減乘除來等于相應(yīng)的結(jié)果數(shù)撩嚼。
注意:

  1. 除號后面的被除數(shù)一定不為0
  2. 乘除法的優(yōu)先級比加減法的優(yōu)先級高

分析:

  1. 先把已經(jīng)計算過的結(jié)果存儲到一個變量名為left中停士,準(zhǔn)備和下一個數(shù)字進行運算(待運算的第一個數(shù)據(jù)存儲到另一個變量名為right中)兩個變量均為double型;
  2. 如果為加/減則為順序計算:left = left +or- right完丽;
    如果為乘除恋技,則先計算當(dāng)前乘除部分: right = *or/ num[下一個數(shù)據(jù)],作為下一個數(shù)字進行運算
    如果為除則下一個運算數(shù)據(jù)不能為0才能繼續(xù)運算:if (i[當(dāng)前] < 4 || num[下一個數(shù)據(jù)] 逻族!= 0){……}蜻底; (注意)
  3. left初始值為0,right初始值為輸入待運算的第一個數(shù)聘鳞;
  4. 運算完之后篩選判斷:if (left + right == result) 計數(shù)器自增薄辅,輸出;如果全部結(jié)束計數(shù)器為零抠璃,則表示無所需結(jié)果站楚;
import java.util.Scanner;
public class FindOper {
    public static void main(String[] args) {
        char oper[]=new char[]{' ','+','-','*','/'};  //操作符號,稍微注意一下
        int type[] = new int[5];  //存放操作符號順序
        int flag=1;//1為正數(shù),-1為負(fù)數(shù)
        double left,right;
        int count=0;
        int num[]=new int[6];
        Scanner input=new Scanner(System.in);
        for(int i=1;i<=5;i++) {
            num[i]=input.nextInt();
        }
        int result=input.nextInt();
        input.close();
        for(type[1]=1;type[1]<=4;type[1]++) {
            if(type[1]<4||num[2]!=0) {
                for(type[2]=1;type[2]<=4;type[2]++) {
                    if(type[2]<4||num[3]!=0) {
                        for(type[3]=1;type[3]<=4;type[3]++) {
                            if(type[3]<4||num[4]!=0) {
                                for(type[4]=1;type[4]<=4;type[4]++) {
                                    if(type[4]<4||num[5]!=0) {
                                        left=0;
                                        right=num[1];
                                        flag=1;
                                        for(int o=1;o<=4;o++) {
                                            switch(oper[type[o]]) {
                                                case '+':{
                                                    left=left+right*flag;
                                                    right=num[o+1];
                                                    flag=1;
                                                    break;
                                                }
                                                case '-':{
                                                    left=left+right*flag;
                                                    right=num[o+1];
                                                    flag=-1;
                                                    break;
                                                }
                                                case '*':{
                                                    right=right*num[o+1];
                                                    break;
                                                }
                                                case '/':{
                                                    right=right/num[o+1];
                                                    break;
                                                }
                                            }
                                        }
                                        if(left+flag*right==result) {
                                            count++;
                                            for(int a=1;a<=4;a++) {
                                                System.out.print(""+num[a]+oper[type[a]]);
                                            }
                                            System.out.print(num[5]+"="+result);
                                            System.out.println();
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
        if(count==0) {
            System.out.println("無搏嗡!");
        }
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末窿春,一起剝皮案震驚了整個濱河市拉一,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌旧乞,老刑警劉巖蔚润,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異尺栖,居然都是意外死亡嫡纠,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門延赌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來除盏,“玉大人,你說我怎么就攤上這事皮胡〕占眨” “怎么了赏迟?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵屡贺,是天一觀的道長。 經(jīng)常有香客問我锌杀,道長甩栈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任糕再,我火速辦了婚禮量没,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘突想。我一直安慰自己殴蹄,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布猾担。 她就那樣靜靜地躺著袭灯,像睡著了一般。 火紅的嫁衣襯著肌膚如雪绑嘹。 梳的紋絲不亂的頭發(fā)上稽荧,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天,我揣著相機與錄音工腋,去河邊找鬼姨丈。 笑死,一個胖子當(dāng)著我的面吹牛擅腰,可吹牛的內(nèi)容都是我干的蟋恬。 我是一名探鬼主播,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼趁冈,長吁一口氣:“原來是場噩夢啊……” “哼歼争!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤矾飞,失蹤者是張志新(化名)和其女友劉穎一膨,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體洒沦,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡豹绪,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了申眼。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片瞒津。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖括尸,靈堂內(nèi)的尸體忽然破棺而出巷蚪,到底是詐尸還是另有隱情,我是刑警寧澤濒翻,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布屁柏,位于F島的核電站,受9級特大地震影響有送,放射性物質(zhì)發(fā)生泄漏淌喻。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一雀摘、第九天 我趴在偏房一處隱蔽的房頂上張望裸删。 院中可真熱鬧,春花似錦阵赠、人聲如沸涯塔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽匕荸。三九已至,卻和暖如春轧铁,著一層夾襖步出監(jiān)牢的瞬間每聪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工齿风, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留药薯,地道東北人。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓救斑,卻偏偏與公主長得像童本,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子脸候,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容

  • 完美立方: //a的三次方等于a穷娱,b绑蔫,c三個數(shù)的立方之和,這一組數(shù)稱為完美立方 #includeusing nam...
    Tangbh閱讀 718評論 0 0
  • 算法簡介 這是一種入門級的算法泵额,它是利用計算機運算速度快配深、精確度高的特點,對要解決問題的所有可能情況嫁盲,一個不漏地進...
    xiaoshua閱讀 422評論 0 0
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗篓叶。 張土汪:刷leetcod...
    土汪閱讀 12,737評論 0 33
  • 我覺得好遺憾缸托。不久前我在微博上看到“魚兒”,我很喜歡它瘾蛋,冬天就快要冰凍人們的心俐镐,我知道那種苦痛的感覺,無家可歸的它...
    KootaU閱讀 426評論 1 3
  • 最近有一些之前做淘客運營朋友,想學(xué)習(xí)一些店鋪淘客運營技巧幸斥,也是不厭其煩的來找我匹摇。其實我是很懶的咬扇,我在很多群里甲葬,很多...
    且隨你閱讀 195評論 0 0