求大神帮忙看上这道题
求大神帮忙看下这道题
1. 编程实现在一个9位数的正整数n中插入4个乘号,使分得的5个整数的乘积最大;
2. 输入 n
3. 输出 被分得的5个整数、得到的最大乘积
4. 例如:输入 734019862
输出 73*401*9*8*62=130674672
算法上怎么实现,或者给点思路吧,谢谢!
------解决方案--------------------
分解n为9个数字存入数组的第0--第8个元素中
最大乘积设为max=0
五个整数全设为0
第一个乘号的位置p1在第1--第5元素前(循环)
{p1前的元素连乘拼合第一个整数
第二个乘号的位置p2在p1+1--第6元素前(循环)
{p2前的元素拼合为第二个整数
第三个乘号的位置p3在p2+1--第7元素前(循环)
{p3前的元素拼合为第三个整数
第四个乘号的位置p4在p3+1--第8元素前(循环)
{p4前的元素拼合为第四个整数
p4前的元素拼合为第五个整数
五个整数的乘积记为product
若product>max
{max<=product
并记录五个整数
}
}
}
}
}
输出max和记录的五个整数
------解决方案--------------------
只拿原题目中的数据做测试。
/*******************************************
1. 编程实现在一个9位数的正整数n中插入4个乘号,使分得的5个整数的乘积最大;
2. 输入 n
3. 输出 被分得的5个整数、得到的最大乘积
4. 例如:输入 734019862
输出 73*401*9*8*62=130674672
**********************************************/
#include <stdio.h>
#include <stdlib.h>
int getInteger( int a[], int start, int last)
{
int k;
int product=a[start];
for( k=start+1; k<last; k++)
product=product*10+a[k];
return product;
}
int main(int argc, char *argv[])
{
int a[9]={ 7, 3, 4, 0, 1, 9, 8, 6, 2 };//原题目数据
int b[5];
int product=1;
int max=0;
int maxb[5];
int p1,p2,p3,p4;
int k;
for(p1=1; p1<6; p1++)
{
b[0]= getInteger(a, 0, p1);
for(p2=p1+1; p2<7; p2++)
{
b[1]= getInteger(a, p1, p2);
for( p3=p2+1; p3<8; p3++ )
{
b[2]= getInteger(a, p2, p3);
for(p4=p3+1; p4<9; p4++)
{
b[3]=getInteger(a, p3, p4);
product=b[4]=getInteger(a, p4, 9);
for(k=0; k<4; k++)
product*=b[k];
if( product>max )
{
max=product;
for( k=0;k<5; k++ )
maxb[k]=b[k];
}
}
}
}
}
printf("\n Max is %d = %d",max,maxb[0]) ;
for( k=1; k<5; k++ )
printf(" * %d",maxb[k]);
printf("\n");
system("PAUSE");
return 0;
}
1. 编程实现在一个9位数的正整数n中插入4个乘号,使分得的5个整数的乘积最大;
2. 输入 n
3. 输出 被分得的5个整数、得到的最大乘积
4. 例如:输入 734019862
输出 73*401*9*8*62=130674672
算法上怎么实现,或者给点思路吧,谢谢!
------解决方案--------------------
分解n为9个数字存入数组的第0--第8个元素中
最大乘积设为max=0
五个整数全设为0
第一个乘号的位置p1在第1--第5元素前(循环)
{p1前的元素连乘拼合第一个整数
第二个乘号的位置p2在p1+1--第6元素前(循环)
{p2前的元素拼合为第二个整数
第三个乘号的位置p3在p2+1--第7元素前(循环)
{p3前的元素拼合为第三个整数
第四个乘号的位置p4在p3+1--第8元素前(循环)
{p4前的元素拼合为第四个整数
p4前的元素拼合为第五个整数
五个整数的乘积记为product
若product>max
{max<=product
并记录五个整数
}
}
}
}
}
输出max和记录的五个整数
------解决方案--------------------
只拿原题目中的数据做测试。
/*******************************************
1. 编程实现在一个9位数的正整数n中插入4个乘号,使分得的5个整数的乘积最大;
2. 输入 n
3. 输出 被分得的5个整数、得到的最大乘积
4. 例如:输入 734019862
输出 73*401*9*8*62=130674672
**********************************************/
#include <stdio.h>
#include <stdlib.h>
int getInteger( int a[], int start, int last)
{
int k;
int product=a[start];
for( k=start+1; k<last; k++)
product=product*10+a[k];
return product;
}
int main(int argc, char *argv[])
{
int a[9]={ 7, 3, 4, 0, 1, 9, 8, 6, 2 };//原题目数据
int b[5];
int product=1;
int max=0;
int maxb[5];
int p1,p2,p3,p4;
int k;
for(p1=1; p1<6; p1++)
{
b[0]= getInteger(a, 0, p1);
for(p2=p1+1; p2<7; p2++)
{
b[1]= getInteger(a, p1, p2);
for( p3=p2+1; p3<8; p3++ )
{
b[2]= getInteger(a, p2, p3);
for(p4=p3+1; p4<9; p4++)
{
b[3]=getInteger(a, p3, p4);
product=b[4]=getInteger(a, p4, 9);
for(k=0; k<4; k++)
product*=b[k];
if( product>max )
{
max=product;
for( k=0;k<5; k++ )
maxb[k]=b[k];
}
}
}
}
}
printf("\n Max is %d = %d",max,maxb[0]) ;
for( k=1; k<5; k++ )
printf(" * %d",maxb[k]);
printf("\n");
system("PAUSE");
return 0;
}