求算法设计与分析的小程序

来源:百度知道 编辑:UC知道 时间:2024/09/23 10:35:36
题目如下:有一个数字由1,2,3,...,9组成的数字字符串(长度不超过200)问如何将M(M<21)个“+”插入到这个数字串中,使所形成的算术表达式值最小。编写算法姐姐这个问题。 注意:加号不能加在数字串的最前面或最末尾,也不能犹两个或者两个以上的加号相邻,M保证小与数字串的长度。 例如:数字串79846,若要加入两个加号,则最佳方案为79+8+46,算术表达式的值为133。(本人分数有限希望好人能帮忙谢谢)
这位高人 我明白你的意思 但是我是想要能运行的源程序 能不能帮忙弄一份 感谢

用C语言 C++语言都行

我要在visual C++6.0中运行 显示找不到这个头文件#include "stdafx.h" 呵呵 谢谢你了

首先谢谢你的关注,虽然没有达到我要的结果,但是还是很感激你了,呵呵
其实我想要的运行结果不是单纯的我举的例子,(你给我的程序的运行结果是:79+8+46=133 Press any key to continue)而我想要的运行结果是我用键盘输入一个数字串 就会出来最佳方案 呵呵 希望你能继续帮我 无论帮不帮的上我 我都会把你的采纳为最佳答案的 放心好了

好了,尽管我没有得到非常满意的答案 但是还是谢谢你了 thanks

visual studio下的工程,所以有个预编译头stdafx,然后没考虑异常。。
stdafx应该是去掉就可以吧,我不太清楚,反正这个根据vc++的情况稍作改动就可以了,其他算法之类是不受影响的
---------------------------------------------------------
输入两个数,当中要有一个空格。不过C/C++实在写的太少,貌似读入那里写的太麻烦了。。但是又不知道一般会怎么写。。然后,异常依旧未考虑。。

#include "stdafx.h"
#include "stdio.h"

double result = 10e250;
int *plusPositions;
int plusCount;

double atod(int *digits, int length)
{
double number = 0;
for (int i = 0; i < length; ++i) {
number = number * 10 + digits[i];
}
return number;
}

void solve(int *digits, int length, int index, double currentSum,
int plusesRemain, int *tempPlusPositions)
{
if (plusesRemain == 0) {
double tempResult = currentSum + atod(digits, length);
if (tempResult < result) {
memcpy(plusPositions, tempPlusPositions, sizeof(int) * plusCount);
result = tempResult;
}
} else {