整数分解之和最大问题(全分成3,少分成2)

原创 2007年10月15日 20:48:00

 

/*
 整数分解(版本2)
一个正整数可以分解成若干个自然数之和。请你编一个程序,对于给出的一个正整数n(1<=n<=1500),求出满足要求的分解方案,并使这些自然数的乘积m达到最大。
例如n=10,则可以分解为2+2+3+3,乘积m=2*2*3*3=36
 
   
   
 输入格式 Input Format  
   一个正整数n
 
   
   
 输出格式 Output Format  
   输出分解的自然数的最大乘积m
 
 
*/
 
#include 
<stdio.h>
#define MAX 10001

/*int big_pow_x_y(int x,int y,int big[])
{
    int len = 0 ,i,j ;
    int xz[MAX]={0},yz[MAX] = {0} ;
    
    return  len ;
}
*/

int jinwei(int big[],int len)
{
    
int k ;
    
for(k=1;k<= len ; k++)
    
if ( big[k] >= 10)
       {
            
if ( big[len] >= 10)
            len 
++ ;
            big[k
+1+= big[k] / 10 ;
            big[k] 
%= 10 ;
       }
       
    
return len ;
}

int pow_3 (int x,int y ,int big[])
{
    
int i,j,k,len=1;
    big[
1= 1 ;
    
    
for(i=1 ; i<= y ; i++)
    {
       
for(j=1;j<= len ; j++)
       big[j] 
*= x ;
       len 
= jinwei(big,len);
    }
    
    
return len ;
}

     
int main(void)
{
    
int k,n,h,last=0;
    
int big[MAX] = {0},lbig=0;
    big[
1= 1 ;
    scanf(
"%d",&n);
    
    
if ( n <= 4)
    {
         printf(
"%d ",n);
         
return 0 ;
    }
    
if ( n % 3 == 1)
    {
         k 
= n / 3 - 1 ;
         last 
= 4 ;
    }
    
else
    
if ( n % 3 == 2)
    {
         k 
= n / 3 ;
         last 
= 2 ;
    }
    
else
    {
        k 
= n/3 ;
    }
    
    
/*lbig = big_pow_x_y(3,k,big) ;*/
    
    
if ( k > 0)
    lbig 
= pow_3(3,k,big) ;
    
    
if ( last > 1 )
    {
     
     
for(h=1 ; h<= lbig ; h++)
     big[h] 
*= last ;
     lbig 
= jinwei(big,lbig);
    }
    
     
for(h=lbig ; h>= 1 ; h--)
     printf(
"%d",big[h]);
     printf(
" ");
   
 
    
    
return 0 ;
}

整数划分如,对于正整数n=6,可以分划为:6 5+1

整数划分 如,对于正整数n=6,可以分划为: 6 5+1 4+2, 4+1+1 3+3, 3+2+1, 3+1+1+1 2+2+2, 2+2+1+1, 2+1+1+1+1 1+1+1+1+...
  • chzayi
  • chzayi
  • 2015年03月28日 15:21
  • 1635

11091 最优自然数分解问题(贪心)

11091 最优自然数分解问题 时间限制:1000MS  内存限制:65535K 提交次数:0 通过次数:0  题型: 编程题   语言: C++;C;VC;JAVA ...
  • u013571487
  • u013571487
  • 2014年12月03日 18:30
  • 3100

01-复杂度1 最大子列和问题 (20分)

01-复杂度1 最大子列和问题   (20分) 给定KK个整数组成的序列{ N1N​1​​, N2N​2​​, ..., NKN​K​​ },“连续子列”被定义为{ NiN​i​​, Ni1N...
  • sysusyf
  • sysusyf
  • 2016年03月26日 16:37
  • 1780

将一个正整数n,拆分成连续的自然数之和,输出所有可能的情况

http://blog.csdn.net/kennyrose/article/details/6544518  本文链接,感谢分享!! from编程之美2.21 问题描述:将一个正整数,拆分成...
  • xiezhongtian
  • xiezhongtian
  • 2014年03月22日 21:29
  • 1750

一个整数数组,长度为n,将其分为m份,使各份的和相等,求m 的最大值比如{3,2,4,3,6} 可以分成{3,2,4,3,6} m=1; {3,6}{2,4,3} m=2 {3,3}{2

问题描述:一个整数数组,长度为n,将其分为m份,使各份的和相等,求m 的最大值 比如{3,2,4,3,6} 可以分成{3,2,4,3,6} m=1; {3,6}{2,4,3} m=2 {3,3}...
  • Army_War
  • Army_War
  • 2014年07月28日 17:33
  • 1496

一个整数数组,长度为n,将其分为m 份,使各份的和相等,求m 的最大值 比如{3,2,4,3,6} 可以分成{3,2,4,3,6} m=1; {3,6}{2,4,3} m=2 {3,3}{2,4}{6

public class max { static int testmax(int[] a){ int sum=0; int maxnum = 0; int[] aux = new int[a.le...
  • dongqifan
  • dongqifan
  • 2014年03月19日 15:46
  • 418

正整数分解使得乘积最大问题

一、问题描述 设n是一个正整数。现在要求将n分解为若干个自然数之和,使得自然数的成绩最大。输出这个最大的乘积。 要求: (1)要求这些自然数互不相同 (2)要求这些自然数可以是相同的   二、问题分析...
  • xiaoquantouer
  • xiaoquantouer
  • 2017年04月12日 14:51
  • 959

将整数n分成k份,且每份不能为空,任意两种分法不能相同(不考虑顺序)【划分问题】

将整数n分成k份,且每份不能为空,任意两种分法不能相同(不考虑顺序)。 例如:n=7,k=3,下面三种分法被认为是相同的: 1,1,5; 1,5,1; 5,1,1。 问有多少种不同的分法。 输入:n,...
  • cacyth
  • cacyth
  • 2016年04月16日 15:34
  • 2899

贪心算法——输入任意一个正整数N,将其分成多个互不相同的整数,和为N,乘积最大

今天在学校群里有人问到这个问题: 输入任意一个正整数N,将其分成多个互不相同的整数,和为N,乘积最大。写出C/C++代码。 贪心策略:要使乘积做大,尽可能地将指定的n(n>4)拆分成从2开始的连续...
  • u010872952
  • u010872952
  • 2013年11月22日 22:01
  • 3126

一个数组由2n个整数组成,把这个数组分成两半,各有n个整数,求一个分法,使这两个子数组和的差最小

有两个序列a,b,大小都为n,序列元素的值任意整数,无序; 要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。 例如:    var a=[100,99,98,...
  • jiyanfeng1
  • jiyanfeng1
  • 2013年02月02日 06:44
  • 4154
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:整数分解之和最大问题(全分成3,少分成2)
举报原因:
原因补充:

(最多只允许输入30个字)