用C c++ 编程 知道一组数 找出这组数中和等于一个给定值的其中几个数

2025-01-31 01:29:41
推荐回答(2个)
回答1:

时间不多不能给一个完全的程序
大概提供一个思路,如果对递归调用或二叉树遍历熟悉的话,相信实现这个方法是小菜一碟

首先分析问题,有N个数的加和,有多少种情况?
2的N次方个。
所以,对每个数是否加入和中的所有情况就是一个完全二叉树。
所以你要做的就是
建立一个数组a[N]
建立一个递归函数,参数是下一个位置nNext 和 是否加入下一个位置的数bAdd 和 当前数的加和nSum
递归函数的停止情况是位置到达N,这时候检测当前数的加和是否满足要求

#include "stdafx.h"
#include "stdio.h"
int iNumber[11]={0,1,2,3,4,5,6,7,8,9,10};
int nKey=52;

void ShowState(bool bState[11])
{
for (int i=1;i<11;i++)
if(bState[i])
printf("%d + ",iNumber[i]);
printf ("= %d\n",nKey);
}

void Func(int nPos,bool bAdd,int nSum,bool bState[11])
{

if(bAdd)
{
nSum+=iNumber[nPos];
bState[nPos]=true;
}
else
{
bState[nPos]=false;
}

if(nPos==11)
{
if(nSum==nKey)
ShowState(bState);

return ;
}
Func(nPos+1,true,nSum,bState);
Func(nPos+1,false,nSum,bState);

}

int main(int argc, char* argv[])
{
bool tNumber[11];
for (int i=0;i<11;i++)
tNumber[i]=false;
Func(0,false,0,tNumber);
return 0;
}
输出 有多余的东西
修正一下就好

回答2:

组数中和都不等于定值呢?是小于定值的最小值么?