原题:
设有一个长度为N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积最大。同时,为了帮助选手能够正确理解题意,主持人还举了如下的一个例子:有一个数字串:312, 当N=3,K=1时会有以下两种分法:1)312=362)312=62这时,符合题目要求的结果是:31*2=62。现在,请你帮助你的好朋友XZ设计一个程序,求得正确的答案。
【输入】第一行共有2个自然数N,K(6≤N≤10,1≤K≤6)第二行是一个长度为N的数字串。【输出】输出所求得的最大乘积(一个自然数)。
【输入样例】
4 2
1231
【输出样例】
62
作者:海洋之心-烈焰甜心
来源:优快云
原文:https://blog.youkuaiyun.com/qq_38060122/article/details/79255198
版权声明:本文为博主原创文章,转载请附上博文链接!
下面是我的代码:
#include<stdio.h>
#include<math.h>
int chengji(char *p,int s1)
{
int i=0,count=0,s,s2=0;char *q;
while(1)
{
if(p[i]=='*'||p[i]=='\0') break;
else
{
count++;
i++;
}
}
i=0;
while(1)
{
if(p[i]=='*'||p[i]=='\0') break;
else
{
s2+=(p[i]-'0')*pow(10,--count);
i++;
}
}
if(p[i]=='\0')
{
s=s1*s2;
return s;
}
else
{
s1=s1*s2;
q=&p[i+1];
chengji(q,s1);
}
}
int charu(int i,char *a,int n)
{
int j;
for(j=n+1;j>=i+1;j--)
{
a[j]=a[j-1];
}
a[i]='*';
n++;
return n;
}
int shanchu(char *a,int n)
{
int i,j;i=n-1;
while(a[i]!='*')
{
i--;
}
for(j=i;j<=n-1;j++)
{
a[j]=a[j+1];
}
n--;
return n;
}
main()
{
int i,j1,j2,j3,j4,v=0,n,k,m1,m2,m3,m4,m5,s[100],max;char a[100];
scanf("%d %d",&n,&k);
getchar();
scanf("%s",a);
if(k==1)
{
for(i=1;i<=n-1;i++)
{
m1=charu(i,a,n);
s[v++]=chengji(a,1);
n=shanchu(a,m1);
}
}
else if(k==2)
{
for(i=1;i<=n-2;i++)
{
m1=charu(i,a,n);
for(j1=i+2;j1<=m1-1;j1++)
{
m2=charu(j1,a,m1);
s[v++]=chengji(a,1);
m1=shanchu(a,m2);
}
n=shanchu(a,m1);
}
}
else if(k==3)
{
for(i=1;i<=n-3;i++)
{
m1=charu(i,a,n);
for(j1=i+2;j1<=m1-2;j1++)
{
m2=charu(j1,a,m1);
for(j2=j1+2;j2<=m2-1;j2++)
{
m3=charu(j2,a,m2);
s[v++]=chengji(a,1);
m2=shanchu(a,m3);
}
m1=shanchu(a,m2);
}
n=shanchu(a,m1);
}
}
else if(k==4)
{
for(i=1;i<=n-4;i++)
{
m1=charu(i,a,n);
for(j1=i+2;j1<=m1-3;j1++)
{
m2=charu(j1,a,m1);
for(j2=j1+2;j2<=m2-2;j2++)
{
m3=charu(j2,a,m2);
for(j3=j2+2;j3<=m3-1;j3++)
{
m4=charu(j3,a,m3);
s[v++]=chengji(a,1);
m3=shanchu(a,m4);
}
m2=shanchu(a,m3);
}
m1=shanchu(a,m2);
}
n=shanchu(a,m1);
}
}
else if(k==5)
{
for(i=1;i<=n-5;i++)
{
m1=charu(i,a,n);
for(j1=i+2;j1<=m1-4;j1++)
{
m2=charu(j1,a,m1);
for(j2=j1+2;j2<=m2-3;j2++)
{
m3=charu(j2,a,m2);
for(j3=j2+2;j3<=m3-2;j3++)
{
m4=charu(j3,a,m3);
for(j4=j3+2;j4<=m4-1;j4++)
{
m5=charu(j4,a,m4);
s[v++]=chengji(a,1);
m4=shanchu(a,m5);
}
m3=shanchu(a,m4);
}
m2=shanchu(a,m3);
}
m1=shanchu(a,m2);
}
n=shanchu(a,m1);
}
}
max=s[0];
for(i=0;i<v;i++)
{
if(max<s[i]) max=s[i];
}
printf("%d",max);
}
完全自创的哦!需要大家仔细理解,这里我就不说的你那么具体啦。