`
橡树心
  • 浏览: 47967 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

八枚银币(Coins)

J# 
阅读更多
问题说明:

        现在有八枚银币abcdefg,已知其中一枚是假币,其重量不同于真币,但不知道是轻还是重,如何用天平以最小的比较次数决定出那个是假币,并得知假币是比真币轻还是重。

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();
    }
}
分享到:
评论

相关推荐

    java编程实现求解八枚银币代码分享

    该问题要求找出8枚银币中唯一一枚重量不同的假币,并确定它是比真币重还是轻,同时尽可能减少称量的次数。以下是对这个问题的详细解析: 1. **问题概述**: - 假设有8枚银币,已知其中一枚是假币,其重量与其余7枚...

    Coins

    - **继承与多态**:如果"Coins"涉及到不同类型的硬币(如金币、银币),可能会有继承关系,同时利用多态性实现通用操作。 2. **数据结构与算法**: - **集合框架**:Java的ArrayList或LinkedList可能用于存储和...

    经典算法C语言经典算法C语言.pdf

    8. 八枚银币(Eight Coins) 八枚银币是一个经典的组合优化问题。问题描述是:给定八枚银币,每枚银币的面值不同,如何使用这些银币组合成某个面值的硬币。解决这个问题的关键是使用动态规划算法,使用动态规划来...

    just-coins:我的世界的硬币1.11.2

    硬币之间存在等价关系,1个金币等于8个银币,1个银币等于64个铜币。这样的比例设定使得货币体系更加平衡,同时也方便玩家进行计算和交易。硬币袋则可以用来存储这些硬币,一个硬币袋相当于9个金币的价值,这为玩家...

    c语言经典小算法

    8. **八枚银币(Eight Coins Puzzle)**:类似于八皇后问题,但在一个3×3的棋盘上放置8枚硬币,每行每列至少有一枚。解决这类问题通常需要深入理解回溯法和递归。 9. **生命游戏(Conway's Game of Life)**:一个著名...

    Coins value-crx插件

    语言:English 许多国际金银币的价值 许多国际金银币的价值。 每个硬币都显示在照片中,并进行了充分描述:大小,贵金属重量,成色等。对于每个硬币,价格的每日更新以欧元,美元和gbp给出。 一些链接显示实际上在...

    C语言 经典算法 算法大全

    8. 八枚银币问题(Eight Coins Puzzle):类似于八皇后问题,但用银币和硬币的重量差异来增加难度,需要找到一个平衡的解决方案。 9. 生命游戏(Conway's Game of Life):一种元胞自动机,展示了简单的规则如何...

    程序算法设计

    八枚银币(Eight Coins Puzzle)和生命游戏(Conway's Game of Life)是两个不同类型的谜题。前者涉及排列问题,后者是著名的细胞自动机,它们都展现了规则简单但行为复杂的系统。 字符串匹配(String Matching)...

    Java算法之经典题目篇.doc

    7. **八枚银币(Coins)**:通过二分查找或平衡天平策略来找出假币,确定其轻重。最小化比较次数是关键。 8. **生命游戏(Life Game)**:生命游戏是一种元胞自动机,使用迭代规则更新细胞状态。可以使用二维数组模拟...

    硬币的价值「Coins value」-crx插件

    许多国际金银铸币的价值。 许多国际金银币的价值。 每个硬币都显示在照片中,并进行了充分描述:大小,贵金属重量,成色等。对于每个硬币,价格的每日更新以欧元,美元和gbp给出。 一些链接显示实际上在eBay上出售的...

    C语言实现一些经典算法,可以免费下载

    8. 八枚银币(Eight Coins Puzzle) 这可能是指用八枚硬币找出满足特定条件的排列,例如价值的排列或特定模式。 9. 生命游戏(Game of Life) 由数学家约翰·康威提出的细胞自动机模型,是一组在二维方格上进行迭代...

Global site tag (gtag.js) - Google Analytics