激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java編程實現求解八枚銀幣代碼分享

java編程實現求解八枚銀幣代碼分享

2021-02-25 22:46ljtyzhr Java教程

這篇文章主要介紹了java編程實現求解八枚銀幣代碼分享,具有一定參考價值,需要的朋友可以了解下。

1、引言

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

2、分析

如果本題目只是很單純的求解假幣是哪一個,問題倒并不是很復雜,只需要回溯遞歸便可求得結果。問題的難點在意,我們需要用最少的步驟!!!

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

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

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

3、示例圖

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

java編程實現求解八枚銀幣代碼分享

4、代碼

java" id="highlighter_303679">
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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();
  }
}

結果:

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

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

總結

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

原文鏈接:http://blog.csdn.net/ljtyzhr/article/details/39274059

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 最新日本中文字幕在线观看 | 99视频有精品视频高清 | 久久久久久亚洲综合影院红桃 | 欧美成人精品欧美一级乱黄 | 欧洲黄色一级视频 | 极品销魂一区二区三区 | 成年毛片 | 凹凸成人精品亚洲精品密奴 | 久久国产成人午夜av浪潮 | 美乳在线观看 | 激情久久免费视频 | 99亚洲国产精品 | 精品伊人| 欧美中文字幕一区二区 | 日本高清在线播放 | 依人在线视频 | 日本成人在线免费 | 亚洲午夜久久久精品一区二区三区 | 婷婷久久综合九色综合色多多蜜臀 | www.99久久久| 欧美一级色片 | 久久福利剧场 | av在线影片| 成人超碰97 | 国产小视频一区 | 国产一级在线免费观看 | 精品一区二区久久久 | 久色视频网站 | 久久无| 午夜在线成人 | 欧美一级黄色网 | 新久草在线视频 | 精品一二三区视频 | 亚洲午夜1000理论片aa | 成人免费观看49www在线观看 | 国产一级二级在线播放 | av电影院在线观看 | 亚洲午夜在线视频 | 欧美a区| 久久精品一二三区 | 欧美一级黄色片免费观看 |