public class Main {//简单假币问题,n个硬币,知道假币是轻的找出来int simpleCoinProblem(int[] arr, int low, int height, int n) {int num1, num2, num3;int add1 = 0;int add2 = 0;if (n == 1) {return low + 1;}if (n % 3 == 0) {num1 = num2 = n / 3;} else {num1 = num2 = n / 3 + 1;}num3 = n - num1 - num2;//计算第1组硬币的重量和for (int i = 0; i < num1; i++) {add1 = add1 + arr[low + i];}//计算第2组硬币的重量和for (int i = num1; i < num1 + num2; i++) {add2 = add2 + arr[low + i];}if (add1 < add2) {//在第1组查找return simpleCoinProblem(arr, low, low + num1 - 1, num1);} else if (add1 > add2) {//在第2组查找return simpleCoinProblem(arr, low + num1, low + num1 + num2 - 1, num2);} else {//在第3组查找return simpleCoinProblem(arr, low + num1 + num2, height, num3);}}//n个硬币,一个假币,不知道轻重,找出来int difficultCoinProblem(int[] coinArr, int low, int height, int n) {//定义三个变量存储硬币的个数int num1, num2, num3;//定义三个变量存储每组硬币的重量int add1 = 0;int add2 = 0;int add3 = 0;if (n == 1) {return low + 1;}if (n % 3 == 0) {num1 = num2 = n / 3;} else {num1 = num2 = n / 3 + 1;}num3 = n - num1 - num2;for (int i = 0; i < num1; i++) {add1 += coinArr[low + i];}for (int i = num1; i < num1 + num2; i++) {add2 += coinArr[low + i];}for (int i = num1 + num2; i < num1 + num2 + num3; i++) {add3 += coinArr[low + i];}if (n % 3 == 0) {if (add2 == add3) {return difficultCoinProblem(coinArr, low, low + num1 - 1, num1);}if (add1 == add2) {//1,2两堆硬币数量相等,肯定出现在第三堆return difficultCoinProblem(coinArr, low + num1 + num2, height, num3);}if (add1 == add3) {return difficultCoinProblem(coinArr, low + num1, low + num1 + num2 - 1, num2);}} else if (n % 3 != 0) {if (add1 == add2) {return difficultCoinProblem(coinArr, low + num1 + num2, height + 0, num3);} else {return difficultCoinProblem(coinArr, low + 0, low + num1 + num2 - 1, num1 + num2 - 1);}}return -1;}}

有错误请指出

简单假币问题以及复杂假币问题相关推荐

  1. 假币问题:有n枚硬币,其中有一枚是假币,已知假币的重量较轻。现只有一个天平,要求用尽量少的比较次数找出这枚假币。

    2017年软件设计师上半场下午题目 [说明] 假币问题:有n枚硬币,其中有一枚是假币,已知假币的重量较轻.现只有一个天平,要求用尽量少的比较次数找出这枚假币. [分析问题] 将n枚硬币分成相等的两部分 ...

  2. 真币与假币的重量问题

    现有八枚硬币a b c d e f g h,已知其中一枚是假币,其重量不同于真币,但不知是较轻或较重,如何使用天平以最少的比较次数,决定出哪枚是假币,并得知假币比真币较轻或较重. 单独求假币的问题是不 ...

  3. c语言求寻找假币的次数,C语言经典算法 - 八枚银币问题

    C语言经典算法 - 八枚银币问题 说明现有八枚银币a b c d e f g h,已知其中一枚是假币,其重量不同于真币,但不知是较轻或 较重,如何使用天平以最少的比较次数,决定出哪枚是假币,并得知假币 ...

  4. (2013.05.05)N枚硬币找1枚假币

    N枚硬币找1枚假币 ――Neicole (2013.05.05) 0. 问题描述 共有N枚硬币,一个天平,在这N枚硬币中有一枚假币,设法找出该枚假币. 1. 原理示例(减治法) 概要: 如上图所示,假 ...

  5. 币圈假币泛滥:造假团伙骗走上亿,买别墅开豪车

    文 | 棘轮 比萨 合约爆仓.资金盘跑路,被ICO和杀猪盘收割--在币圈,玩家们遭遇的坑,可谓不胜枚举. 但许多人都想不到,他们甚至可能还被"假币"所害. 近期,币圈假币案件层出不 ...

  6. HZNUOJ 1157 有假币

    HZNUOJ 1157 有假币 Description 居然有假币!!! 事情是这样的,现在猪肉涨了,但是农民的工资却不见涨啊,没钱怎么买猪肉啊.渊子这就去买猪肉,结果找来的零钱中有假币!!!可惜渊子 ...

  7. 假币问题(八枚硬币及n枚硬币)

    八枚硬币 问题描述 1.有八枚外观相同的硬币,其中有一枚是假币 2.不知道假币较重还是较轻 可以用减治法来求解假币问题 算法思想 1.把硬币按照下标(0-2.3-5.6-7)分成三组 2.比较第一组( ...

  8. (有假币,因子个数)笔试强训

    博主简介:想进大厂的打工人 博主主页:@xyk: 所属专栏: JavaEE初阶 目录 文章目录 一.选择1 二.选择2 二.[编程题]有假币 三.[编程题]因子个数 一.选择1 在使用锁保证线程安全时 ...

  9. 【算法设计与分析】求解查找假币问题

    文章目录 前言 题目描述 解题思路 参考代码 总结 前言 <算法设计与分析>的实验,稍微记录一下,欢迎讨论. 题目描述 编写一个实验程序查找假币问题.有n(n>3)个硬币,其中有一个 ...

最新文章

  1. 革命就是请客吃饭(案例分析吧)
  2. Ie6/ie7 不支持 JSON
  3. 依赖倒置(DIP),控制反转(IoC)与依赖注入(DI)
  4. hdu1272(简单并查集)
  5. linux 内核 三天吐血,编译安装——吐血经验,内附脚本
  6. “约见”面试官系列之常见面试题之第一百篇之响应路由参数的变化(建议收藏)
  7. nginx pdo_mysql_lnmp环境,安装PHP7的扩展pdo_mysql报错的问题?
  8. L--弹出层js实例
  9. 编译cwm-recovery(含部分修改步骤)[转]
  10. QT之QTreeView使用总结
  11. Web项目开发流程 PC端
  12. 【计算机网络】第六部分 应用层(25) 域名空间
  13. 一些生活中常用的英语单词
  14. UEM系列(二)初识UEM“探针”技术
  15. laravel mysql sum,Laravel 数据库操作
  16. Infortrend混合存储推动大体量血站IT系统全面升级
  17. u大侠装服务器系统,U大侠U盘安装Ghost xp系统教程_教你怎么用U盘安装Windows XP系统 - U大侠,装机专家...
  18. 用 Smali 手写一个可运行的 HelloWorld!!!
  19. 20230204英语学习
  20. [转] Microsoft AppLocale Utility 使用说明

热门文章

  1. 架设win2003r2下配置好iis6+php+mysql_PHP环境搭建之Windows 2003 IIS6+PHP5+MySQL5+Zend图文教程 | 沉默过客...
  2. 04. JavaMail 查询/读取邮件
  3. 逐步搜索法的matlab,逐步扫描法(搜索解区间)
  4. day1 - SDK入门
  5. Win10内置Linux系统安装docker
  6. 男生的头发,隔多长时间理一次发最适合
  7. linux查看sd卡系统类型,从SD卡启动linux系统
  8. 多领域常见的一种NB-IoT温湿度传感器
  9. 词云python_词-经典诗词宋词语大全
  10. 阿里Java编码手册实战详解-集合处理篇