和等于total的解答

原创 2005年05月02日 17:53:00

(原题From http://community.csdn.net/Expert/topic/3971/3971377.xml?temp=.7857324)

 

 

 

1.从已知数组d的前n个元素中找出部分元素序列之和等于total的元素序列,约定数组的元素都是正整数,且都小于等于total。

 

 

 

以下是我的解答:

    这个题可以用递归进行穷举。

 

 

 

假设

 

 

 

实现以上方法的函数为 int GetTotal(int *a_piArr,int a_in,int m_iTotal,int i_iIndex)。

 

 

 

其中

 

 

 

函数返回值为能够得到的个数,

 

 

 

const int *const a_piArr为数组的首地址,

 

 

 

const int a_in为从前n个元素中找,

 

 

 

const int m_iTotal为需要找的和,

 

 

 

int a_iNowTotal 为目前的和,

 

 

 

int a_iIndex 为目前的第index个数值,

 

 

 

int *const a_iTmpArr存放找到的几个数值的index,

 

 

 

int a_iTmpCnt存放目前的a_iTmpArr中存放的元素个数。

 

 

 

 

 

 

 

int GetTotal(const int* const a_piArr,const int a_in,const int a_iTotal,int a_iNowTotal,int a_iIndex,int * const a_iTmpArr,int a_iTmpCnt)

{

    static int iRet = 0;

       int i;

    if(a_iIndex >= a_in || a_iNowTotal > a_iTotal)

    {

        return iRet;

    }

   

    while(a_iIndex < a_in)

    {

        while((a_iIndex < a_in) && (a_iNowTotal + a_piArr[a_iIndex] > a_iTotal))

        {

             a_iIndex ++;

        }   

   

        if(a_iIndex >= a_in)

              {

               return iRet;

        }

   

        if(a_iNowTotal + a_piArr[a_iIndex] < a_iTotal)

        {

             a_iTmpArr[a_iTmpCnt] =  a_iIndex;

             GetTotal(a_piArr,a_in,a_iTotal,a_iNowTotal + a_piArr[a_iIndex],a_iIndex + 1,a_iTmpArr,a_iTmpCnt + 1);

        }else // =

        {

             a_iTmpArr[a_iTmpCnt] =  a_iIndex;

             for(i = 0; i <= a_iTmpCnt; i ++)

             {

                 cout<<a_iTmpArr[i] <<":"<< a_piArr[a_iTmpArr[i]] <<" " ;

             }

             cout << endl;       

        }

        a_iIndex ++;

    } // end  while(a_iIndex < a_in)

   

    return iRet;

}

 

 

 

 

 

 

 

例如:

 

 

 

main()中运行如下语句:

 

 

 

  int iTmp[n];

 

 

 

  int id[] = {2,5,5,2,5,6,3};

 

 

 

  int iTotal = 12;

 

 

 

  int iRet;

 

 

 

  iRet = GetTotal(id,n,iTotal,0,0,iTmp,0);

 

 

 

即会将数组id[]的前5个数中和等于12的几个值的序号和值打印出来。

 

 

 

(完毕)

UFT (自定义检查点——票数*价格是否等于总数)

Dim a,b,c,d,e a = Window("Flight Reservation").WinEdit("Tickets:").GetROProperty("text") msgbox a ...
  • tutu66qunqun
  • tutu66qunqun
  • 2015-10-17 10:44:10
  • 287

UFT中应用

在UFT中飞机订票系统中用split方法计算总价格: Dim price,price1,tickets,total,total1,a,b price=window("Flight Reservat...
  • l1023001090
  • l1023001090
  • 2015-10-18 14:08:32
  • 185

ASP.NET万能JSON解析器

  • 2013年03月11日 11:18
  • 12KB
  • 下载

ElasticSearch 实践

todo
  • z69183787
  • z69183787
  • 2017-04-10 10:22:28
  • 622

录制Flight程序登录的脚本

1.   采用自定义检查点,检查Price*Ticket的价格是否等于Total,并用If语句写出判定成功或者失败后的Reporter.ReportEvent报告语句。 Dim tickets,pr...
  • xinhui_L
  • xinhui_L
  • 2015-10-15 21:29:58
  • 459

FastReport中TotalPages显示为0

将报表———选项——双通道  勾选即可
  • Sara_xie
  • Sara_xie
  • 2015-08-21 15:31:51
  • 1143

测试进程运行时间的的各种-time

http://en.wikipedia.org/wiki/CPU_time 维基百科是个好东西。 CPU time:这个东西是真正的CPU time,CPU是分时的,每个进程都分到很多不连续的CP...
  • ysu108
  • ysu108
  • 2012-04-19 12:27:16
  • 2150

一个三位自然数正好等于它各数位上的数字和的18倍。这个三位自然数是几?

这个自然数是18的倍数,从而是9的倍数。因而,它的各位数字之和就是9的倍数。 abc=18(a+b+c) 而a+b+c只有可能是9,18,27 9×18=162 yes 18×18=324 n...
  • weiyanghuadi
  • weiyanghuadi
  • 2014-01-25 14:52:06
  • 1334

Total Variation Denosing

(来自wiki  total variation denoising)In signal processing, Total Variation denoising, also known as to...
  • afgh2587849
  • afgh2587849
  • 2011-05-07 04:32:00
  • 7160

Total Commander基础使用教程(吐血整理)

配置好了Total Commander后,那么开始一段神奇的高效之旅吧!下面奉上小编吐血整理的Total Commander基础使用教程!(只是整理,不是原创哦) 一. 常用操作 ...
  • u012764241
  • u012764241
  • 2016-06-23 09:56:08
  • 5514
收藏助手
不良信息举报
您举报文章:和等于total的解答
举报原因:
原因补充:

(最多只允许输入30个字)