zoukankan      html  css  js  c++  java
  • 数学趣题——寻找假币

    递归分治二分查找法

       1: #include "stdio.h"
       2:  
       3: int getFalseCoin(int coin[], int low, int high)
       4: {
       5:     int i, sum1 = 0, sum2 = 0, sum3 = 0;
       6:  
       7:     if(low + 1 == high)
       8:     {
       9:         if(coin[low] < coin[high]) return low + 1;
      10:         else return high + 1;
      11:     }
      12:  
      13:     if((high - low + 1) % 2 == 0)                    /*n是偶数*/
      14:     {
      15:         for(i = low; i <= low + (high - low) / 2; i++)
      16:             sum1 = sum1 + coin[i];               /*前半段和*/
      17:  
      18:         for(i = low + (high - low) / 2 + 1; i <= high; i++)
      19:             sum2 = sum2 + coin[i];               /*后半段和*/
      20:  
      21:         if(sum1 < sum2) return getFalseCoin(coin, low, low + (high - low) / 2);
      22:  
      23:         if(sum1 > sum2) return getFalseCoin(coin, low + (high - low) / 2 + 1, high);
      24:     }
      25:  
      26:     if((high - low + 1) % 2 != 0)
      27:     {
      28:         for(i = low; i <= low + (high - low) / 2 - 1; i++)
      29:             sum1 = sum1 + coin[i];               /*前半段和*/
      30:  
      31:         for(i = low + (high - low) / 2 + 1; i <= high; i++)
      32:             sum2 = sum2 + coin[i];               /*后半段和*/
      33:  
      34:         sum3 = coin[low+(high-low)/2];
      35:  
      36:         if(sum1 < sum2)
      37:             return getFalseCoin(coin, low, low + (high - low) / 2 - 1);
      38:  
      39:         if(sum1 > sum2)
      40:             return getFalseCoin(coin, low + (high - low) / 2 + 1, high);
      41:  
      42:         if(sum1 + sum3 == sum2 + sum3) return low + (high - low) / 2 + 1;
      43:     }
      44:  
      45: }
      46:  
      47: int main()
      48: {
      49:     int coin[30] = {2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 2};
      50:     printf("The %dth coin is false\n", getFalseCoin(coin, 0, 29));
      51:     return 0;
      52: }
  • 相关阅读:
    常用正则表达式
    偶得
    监控文件夹里面文件修改的小程序
    使用Windows服务发布WCF服务
    查看wcf服务中方法测试客户端
    twitter注册使用指南
    打包工具使用下载
    c#多线程编程
    请确保此文件可访问并且是一个有效的程序集或COM组件
    添加Service Reference, 无法为服务生成代码错误的解决办法
  • 原文地址:https://www.cnblogs.com/steven_oyj/p/1744998.html
Copyright © 2011-2022 走看看