给你两个整数数组a,b和一个整数c(大于等于0),第一个数组a的元素加起来的和加上整数c等于第二个数组b的元素加起来的和,第一个数组a的元素代表一笔交易明细数据,第二个数组b的元素代表一条交易汇总数据,整数c代表手续费怎样找到一种高效的算法,能够让每一笔交易汇总数据能够和多笔明细数据一一对应起来,尽量让汇总数据和对应的明细数据之和相等,如果不相等,则从手续费中拆一部分凑齐,保证手续费刚好够用,且每个元素做到不重不漏比如,input:int[] a = new int{2,4,6,1,3,8,5};int[] b = new int{15,14};int c=0;output:15={6,1,8},14={2,4,3,5}再比如:input:int[] a = new int{2,4,6,1,8,5};int[] b = new int{22,9};int c=5;output:22={2,4,6,1,8,1(来自5的拆分)},9={5,4(来自5的拆分)}这样5被拆分成了4和1,分别送给了22和9这两笔汇总数据

解决方案 »

  1.   

    怎么一个回答的都没有?CSDN不给力啊
      

  2.   

    已知条件:数组a的元素一个一个加起来的总和 + 整数c = 数组b的元素一个一个加起来的总和,其中c>=0比如:c=0的情况
    a = new int{2,4,6,1,3,8,5};
    b = new int{15,14};
    c=0;
    输出:15={6,1,8},14={2,4,3,5},即可满足要求再比如:c>0的情况
    a = new int{2,4,6,1,8,5};
    b = new int{22,9};
    c=5;输出:22={2,4,6,1,8,1(来自c的拆分)},9={5,4(来自c的拆分)},即可满足要求”来自c的拆分的意思“是:
    因为:22(来自b)这个元素不能刚好等于a中的任意个元素加起来的和(差了1),所以需要从c借1
          9(来自b)这个元素不能刚好等于a中的任意个元素加起来的和(差了4),所以需要从c借4
    这样c就被拆分成了1和4两个数
    在拼凑b中元素的过程中,a中的元素不能重复也不能漏掉一个,如果有不够的情况,就向c借