javran吧 关注:7贴子:154
  • 4回复贴,共1

[Javran][Code]整数最优分解问题

只看楼主收藏回复

Const
  MaxL = 2000 ;

Type
  TIndex = Longint ;
  TNum = 
    Record
      D : Array [ 0 .. MaxL ] Of TIndex ;
      L : TIndex ;
    End ;
  
Var
  N : TIndex ;
  S : TNum ;

Procedure Mul ( R : TIndex ) ;
  Var
    I , J : TIndex ;
  Begin
    For I := 1 To S.L Do
      S.D [ I ] := S.D [ I ]*R ;
    For I := 1 To S.L Do
      Begin
        Inc ( S.D [ I + 1 ] , S.D [ I ] Div 10 ) ;
        S.D [ I ]:= S.D [ I ] Mod 10 ;
      End ; 
    If ( S.D [ S.L + 1 ] <> 0 ) Then
      Inc ( S.L ) ;
    While ( S.D [ S.L ] > 9 ) Do
      Begin
        Inc ( S.D [ S.L + 1 ] , S.D [ S.L ] Div 10 ) ;
        S.D [ S.L ]:= S.D [ S.L ] Mod 10 ;
        Inc ( S.L ) ;  
      End ;
  End ;

Procedure Init ;
  Begin
    Readln ( N ) ;
  End ;

Procedure Main ;
  Var
    I : TIndex ;
    K : TIndex ;
  Begin  
    K := N Div 3 ;
    S.D [ 1 ] := 1 ; 
    S.L := 1 ;
    If ( N Mod 3 = 1 ) Then
      Dec ( K ) ;
    For I := 1 To K Do
      Mul ( 3 ) ;
    If ( N Mod 3 = 1 ) Then
      Mul ( 4 ) ;
    If ( N Mod 3 = 2 ) Then
      Mul ( 2 ) ;
  End ;

Procedure Final ;
  Var
    I : TIndex ;
  Begin
    For I := S.L DownTo 1 Do
      Write ( S.D [ I ] ) ;
    Writeln ;
  End ;
Begin
  Init ;
  Main ;
  Final ;
End .


1楼2007-09-08 19:38回复
    试题一、整数最优分解问题 (本题满分50分)
    源程序:integer.pas/integer.c/integer.cpp

    问题描述:
    设n是一个正整数。现要求将n分解为若干个自然数的和,且使这些自然数的乘积最大。
    编程任务:
    对于给定的正整数n,编程计算最优分解方案。
    数据输入:
    由文件input.txt提供输入数据。文件的第1行是正整数n。
    结果输出:
    程序运行结束时,将计算出的最大乘积输出到文件output.txt中。
    输入文件示例 输出文件示例
    input.txt output.txt
    10 36


    2楼2007-09-08 19:39
    回复
      @echo off
      if "%1"=="" goto loop1
      code <1t%1.in >tmp.out
      fc tmp.out 1t%1.out >>Result.Txt
      goto end
      :loop1
      for %%i in ( 1,2,3,4,5,6,7,8,9,10 ) do @%0 %%i
      :end
      @echo on
      @echo Test %1 Done.
      @echo off


      3楼2007-09-08 19:41
      回复
        Result.Txt:
        正在比较文件 tmp.out 和 1T1.OUT
        FC: 找不到相异处

        正在比较文件 tmp.out 和 1T2.OUT
        FC: 找不到相异处

        正在比较文件 tmp.out 和 1T3.OUT
        FC: 找不到相异处

        正在比较文件 tmp.out 和 1T4.OUT
        FC: 找不到相异处

        正在比较文件 tmp.out 和 1T5.OUT
        FC: 找不到相异处

        正在比较文件 tmp.out 和 1T6.OUT
        FC: 找不到相异处

        正在比较文件 tmp.out 和 1T7.OUT
        FC: 找不到相异处

        正在比较文件 tmp.out 和 1T8.OUT
        FC: 找不到相异处

        正在比较文件 tmp.out 和 1T9.OUT
        FC: 找不到相异处

        正在比较文件 tmp.out 和 1T10.OUT
        FC: 找不到相异处


        4楼2007-09-08 19:41
        回复
          一次编译通过,由于数据范围估计不足,导致部分Wrong Answer.
          原MaxL=1000


          5楼2007-09-08 19:43
          回复