先上题目
思路: 本题要求求分部乘积最大值,可以用深度优先搜索(DFS)穷举所有情况,找出最大值。
上代码
#include<stdio.h>
char num[100] = { 0 };
int sum(int l, int r)//sum函数作用:将所需的数字从字符串类型转化为整型
{ //传入值分别为:所需数字在字符串的 左右端点下标
int n = 0, sum= 0;
for (int i = l; i < r; i++)
{
n = num[i] - '0';
sum = sum * 10 + n;
}
return sum;
}
int Dfs(int l, int r, int k)
{
if (k == 0) //跳出条件:剩余乘号为零
{
return sum(l, r);
}
else if (l < r)
{
int max = 0;
for (int i = l+1; i < r; i++)
{
int r1 = sum(l, i);//每个乘号之前的值
int r2 = Dfs(i, r, k - 1);//每个乘号之后的值。//调用dfs后如果k不为零还要继续加乘号
int re = r1 * r2 ;
max = re > max ? re : max;//取最大值
}
return max;
}
else
return 1;
}
int main()
{
int N, K;//N为数字串长度,K为乘号个数
scanf("%d%d", &N, &K);
scanf("%s", num);//数字以字母串的形式储存,利于数字的拆分
int result = Dfs(0, N, K);
//Dfs传入三个值,分别是:数字串左端/数字串右端/剩余乘号个数
printf("%d", result);
return 0;
}
第一次写博客,希望能帮到需要的朋友。