和等于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的几个值的序号和值打印出来。

 

 

 

(完毕)

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

配置好了Total Commander后,那么开始一段神奇的高效之旅吧!下面奉上小编吐血整理的Total Commander基础使用教程!(只是整理,不是原创哦) 一. 常用操作 ...

高效程序员秘籍(4):使用Total Commander替换Windows资源管理器

最新的Web浏览器都有标签页特性,而Windows自带的资源管理器却没有,总是需要同时打开多个窗口,后来下载了一个插件叫 QTTabbar,可以让资源管理器具备标签页的特性,但总是出问题。除此以外,W...

Cognos函数(六) - total的使用

这回介绍个函数,total,这个是很常用的,

最易读的Total Commander教程——搜索与批量改名

引言:   上一讲介绍了TC的压缩功能,并以压缩程序插件为例,初步介绍了TC的插件功能。   本讲介绍TC的两大功能:搜索、批量文件改名。并结合这些内容,补充文件内容插件、更改快捷键的知识。  ...

【重要更新】强大的文档管理工具包Aspose.Total 2017年中更新大合集

强大的文档管理套包Aspose.Total年中更新大合集。

Total Commander的使用经历

Total Commander中的隐藏设置 找到你的配置文件 Total Commander的配置文件Wincmd.ini在最新版已经不再存在于它的安装目录下,那么它具体的位置在哪里呢?如...

ReportStudio入门教程(七十三) - 计算占比(使用total)

今天,我们来实现这样一个功能

WordPress插件W3 Total Cache爆漏洞可获取密码数据库信息

W3 Total Cache相信玩Wordpress都知道,是一款wp上非常流程的缓存插件,它可以动态页面缓存、CSS\JS压缩、数据库缓存、CDN加速等,类似的插件还有WP Super Cache、...

7.4 对例 7.5 进行修改,将其中的友元函数 total 改为 max,即显示三个银行中存款最 多的银行及其存款数。

7.4 对例 7.5 进行修改,将其中的友元函数 total 改为 max,即显示三个银行中存款最 多的银行及其存款数。...

.NET文档处理套包GroupDocs.Total for .NET新版发布 | 附下载

GroupDocs.Total for .NET 是.NET的文档管理套包, 能够在.NET应用程序中查看、导出、注释、比较、签名、自动化和搜索文档。...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:和等于total的解答
举报原因:
原因补充:

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