最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java編程實(shí)現(xiàn)求解八枚銀幣代碼分享

 更新時間:2017年11月30日 17:10:53   作者:ljtyzhr  
這篇文章主要介紹了java編程實(shí)現(xiàn)求解八枚銀幣代碼分享,具有一定參考價值,需要的朋友可以了解下。

1、引言

筆者在大學(xué)的算法競賽中,遇到過這樣的一個題目,現(xiàn)在拿出來與大家分享一下:現(xiàn)在有現(xiàn)有八枚銀幣abcdefgh,已知其中一枚是假幣,其重量不同于真幣,但不知是較輕或較重,如何使用天平以最少的比較次數(shù),決定出哪枚是假幣,并得知假幣比真幣較輕或較重。

2、分析

如果本題目只是很單純的求解假幣是哪一個,問題倒并不是很復(fù)雜,只需要回溯遞歸便可求得結(jié)果。問題的難點(diǎn)在意,我們需要用最少的步驟?。。?/p>

比之以前的數(shù)據(jù)結(jié)構(gòu)問題,有遞歸,回溯,我們今天可能要接觸一個新的概念,叫做樹。顧名思義,數(shù)結(jié)構(gòu)就是說我們的分析圖示像樹一樣,有分支節(jié)點(diǎn)等各種信息。樹結(jié)構(gòu)是數(shù)據(jù)結(jié)構(gòu)中的一個較大的章節(jié),不在我們的討論之中,在本題目當(dāng)中,我們會介紹樹的一個小小的分子,決策樹。

我們先建立一下,八個銀幣求解的數(shù)學(xué)模型。一個簡單的狀況是這樣的,我們將銀幣依次命名為abcdefg等,我們比較a+b+c與d+e+f,如果相等,則假幣必是g或h,我們先比較g或h哪個較重,如果g較重,再與a比較(a是真幣),如果g等于a,則g為真幣,則h為假幣,由于h比g輕而g是真幣,則h假幣的重量比真幣輕。

如果不相等呢?又是何種情況,我們將依次分支回溯比較,直到得到最終的答案!

3、示例圖

根據(jù)上面的分析,我們可以有一個完整的決策樹圖示:

4、代碼

public class Coins { 
  private int[] coins; 
   
  public Coins() { 
    coins = new int[8]; 
    for(int i = 0; i < 8; i++)  
      coins[i] = 10;  
  } 
   
  public void setFake(int weight) { 
    coins[(int) (Math.random() * 7)] = weight; 
  } 
   
  public void fake() { 
    if(coins[0]+coins[1]+coins[2] ==  
      coins[3]+coins[4]+coins[5]) {  
      if(coins[6] > coins[7])  
        compare(6, 7, 0);  
      else  
        compare(7, 6, 0);  
    }  
    else if(coins[0]+coins[1]+coins[2] >  
        coins[3]+coins[4]+coins[5]) {  
      if(coins[0]+coins[3] == coins[1]+coins[4])  
        compare(2, 5, 0);  
      else if(coins[0]+coins[3] > coins[1]+coins[4])  
        compare(0, 4, 1);  
      if(coins[0]+coins[3] < coins[1]+coins[4])  
        compare(1, 3, 0);  
    }  
    else if(coins[0]+coins[1]+coins[2] <  
        coins[3]+coins[4]+coins[5]) {  
      if(coins[0]+coins[3] == coins[1]+coins[4])  
        compare(5, 2, 0);  
      else if(coins[0]+coins[3] > coins[1]+coins[4])  
        compare(3, 1, 0);  
      if(coins[0]+coins[3] < coins[1]+coins[4])  
        compare(4, 0, 1);  
    }  
  } 
   
  protected void compare(int i, int j, int k) { 
    if(coins[i] > coins[k])  
      System.out.print("\n假幣 " + (i+1) + " 較重");  
    else  
      System.out.print("\n假幣 " + (j+1) + " 較輕");  
  } 
   
  public static void main(String[] args) { 
    if(args.length == 0) { 
      System.out.println("輸入假幣重量(比10大或?。?); 
      System.out.println("ex. java Coins 5"); 
      return; 
    } 
     
    Coins eightCoins = new Coins(); 
    eightCoins.setFake(Integer.parseInt(args[0])); 
    eightCoins.fake(); 
  } 
} 

結(jié)果:

輸入假幣重量(比10大或小)
ex. java Coins 5

這里是一段通用的解題方法,大家可以仔細(xì)琢磨代碼,對于本段代碼,上面的分析已經(jīng)足夠,剩下的就要大家自己琢磨學(xué)習(xí)了,這樣才能深刻理解。

總結(jié)

以上就是本文關(guān)于java編程實(shí)現(xiàn)求解八枚銀幣代碼分享的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關(guān)文章

  • Java實(shí)現(xiàn)圖片合成的示例詳解

    Java實(shí)現(xiàn)圖片合成的示例詳解

    前端有一個神器——canvas,這個畫布標(biāo)簽可以處理各種圖片的合成,可以精確到圖片的具體坐標(biāo)。java后端也有這樣的神器,那就是image-combiner,可以很簡單的合成圖片,感興趣的可以試一試
    2022-01-01
  • 淺談foreach寫失效的問題

    淺談foreach寫失效的問題

    下面小編就為大家?guī)硪黄獪\談foreach寫失效的問題。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-07-07
  • SpringBoot集成SpringSecurity和JWT做登陸鑒權(quán)的實(shí)現(xiàn)

    SpringBoot集成SpringSecurity和JWT做登陸鑒權(quán)的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot集成SpringSecurity和JWT做登陸鑒權(quán)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • Spring mvc JSON數(shù)據(jù)交換格式原理解析

    Spring mvc JSON數(shù)據(jù)交換格式原理解析

    這篇文章主要介紹了Spring mvc JSON數(shù)據(jù)交換格式原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • springBoot配置國產(chǎn)達(dá)夢數(shù)據(jù)庫的示例詳解

    springBoot配置國產(chǎn)達(dá)夢數(shù)據(jù)庫的示例詳解

    本文向大家介紹springBoot?配置國產(chǎn)達(dá)夢數(shù)據(jù)庫的相關(guān)知識,文章結(jié)合示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • Maven安裝及MyEclipse中使用Maven

    Maven安裝及MyEclipse中使用Maven

    這篇文章主要為大家詳細(xì)介紹了Maven安裝步驟,及MyEclipse中如何使用Maven,感興趣的小伙伴們可以參考一下
    2016-07-07
  • SpringBoot?@Scheduled?Cron表達(dá)式使用方式

    SpringBoot?@Scheduled?Cron表達(dá)式使用方式

    這篇文章主要介紹了SpringBoot?@Scheduled?Cron表達(dá)式使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-03-03
  • java中JDBC增刪改查操作詳解

    java中JDBC增刪改查操作詳解

    大家好,本篇文章主要講的是java中JDBC增刪改查操作詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • java多線程之定時器Timer的使用詳解

    java多線程之定時器Timer的使用詳解

    本篇文章主要介紹了java多線程之定時器Timer的使用詳解,Time類主要負(fù)責(zé)完成定時計劃任務(wù)的功能,有興趣的可以了解一下。
    2017-04-04
  • Java之理解Redis回收算法LRU案例講解

    Java之理解Redis回收算法LRU案例講解

    這篇文章主要介紹了Java之理解Redis回收算法LRU案例講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08

最新評論

绥棱县| 青神县| 墨江| 雅江县| 师宗县| 晋江市| 大埔县| 蒙山县| 富阳市| 灵台县| 洞口县| 长春市| 长寿区| 新疆| 白朗县| 轮台县| 淮南市| 江油市| 科技| 资溪县| 崇义县| 五大连池市| 临澧县| 和静县| 神农架林区| 班玛县| 察哈| 集贤县| 禹州市| 栾川县| 金阳县| 景德镇市| 鸡西市| 木里| 天门市| 多伦县| 岗巴县| 蒙阴县| 乌兰县| 辉南县| 金门县|