ABAP算術問題:脱臼最も近いデジタル問題

Kビット数N
(K≤2000、N≤1020)
の目的を達成するために、コードの各数の和と同じで最も近い一致と多数Nを見つける、N有します。
例えば:本デジタル0050 0104要求、112必要121の数、
考えアルゴリズム解析アルゴリズム
直接暴力、図形を求めることは、順序が大きすぎる数字、デジタルKビット、直接使用することができない整数であることができません、またはフロートは、ストレージアレイを使用して表現しました。この図は、ステップ1、最初から始まる数字の最小数は、1の目の前でそれを表示するために、1の分解を最後の桁を打破する、分析されるべきです。9および特別0、そう左から右にスキャンを開始は、0が発生しましスキップ、それはこの数-1を入れて、最初の非ゼロの数に遭遇した後、最終的には表面に移動し、その後、ステップ2、最初は非数値9を探し始めたあなたは9が発生した場合、図9は、1に、非9に遭遇し、最終的な表面に操作の終止符を打ちます。
以下のような例:
1999000 - > 1990008-> 2000899
この状況が数字1つのアップの冒頭で、999000であれば、結果は1000899であることを問題に注意を払うために
いくつかの手に負えないデータ:29399 - > 29489

以下は、に従事する簡素化するのに最適なスペースであるべきコードが、怠惰です

DATA A のTYPE I.                                               " K≤2000 

DATA:CNT TYPE。I " 無制限の累積カウンタ
データ(STR 。5TYPE 。C
 " INPUT 
DATA N- TYPEの値P ' 29 399 ' LENGTH 。5" N≤1020 
DATA K のTYPE I VALUEの。5" K≤2000 
" の出力
データ X TYPE私。                                              K≤2000 

STR = 。N
 のCALL  FUNCTION  ' CONVERSION_EXIT_ALPHA_INPUT ' 
  EXPORTINGの入力= STR
   IMPORTING出力= STR。


DATA:オフTYPE I、設定TYPE I。

DATABEGIN  OF wa_number、
       インデックス   TYPE I、TYPE I、
      END  OF wa_number。
 データ it_number LIKE  TABLE  OFwa_number。

DOのk 
  CNT = SY- インデックス。
  オフ = SY-指数- 1 
  wa_number -index = SY- インデックス。
  wa_number個= STR +オフ(1 )。
  APPEND wa_number TO it_number。
  CLEAR wa_number。
ENDDO 

SORT it_number   BY インデックスDESCENDING。
cl_demo_output => ディスプレイ(it_number)。

DOのk READ  TABLEを it_number INTO  DATA(wa_tmp)INDEX SY- インデックス。
  IF wa_tmp番号EQ  0 ELSE IF SY-インデックスEQ 1 
      wa_tmp個= wa_tmp-数- 1 MODIFY it_numberをFROM wa_tmpのINDEX SY- インデックス。
    他に。
      CNT + = 1 
      wa_tmp -index = CNT。
      wa_tmp個= wa_tmp-数- 1 MODIFY it_numberをFROM wa_tmpのINDEX SY- インデックス。
    ENDIFDATA(IDX)= SY-指数+ 1 PERFORM do_add 使用したIDXを。
    終了ENDIF ENDDO *
 CLEAR STR ..
 SORT it_number   BY インデックス。
LOOP  AT it_number INTO wa_number .. 
  STR = strの&& wa_number- 数。
ENDLOOP 
cl_demo_output => ディスプレイ(STR)。

FORMは do_add 使用したIDXを。

  SORT it_number   BY インデックスDESCENDING。
  READ  TABLE it_number INTO  DATA (wa_tmp2)INDEX idxのを。
  IF SY-SUBRCのEQ  0 IF wa_tmp2番号EQ  9 
      CNT = CNT + 1 DELETE it_number INDEX idxのを。
      wa_tmp2 -index = CNT。
      APPEND wa_tmp2をTO it_number。
      DATA(IDX2)= IDX + 1 PERFORM do_add 使用したIDX2を。
    ELSE 
      wa_tmp2個+ = 1MODIFY it_numberをFROM wa_tmp2のINDEX idxの。
    ENDIF ELSE 
    wa_tmp -index = 0 
    wa_tmp個= 1 APPEND wa_tmp2をTO it_number。
  ENDIF 

ENDFORM

 

おすすめ

転載: www.cnblogs.com/yibing-jia/p/11280779.html
おすすめ