TYPES: BEGIN OF ty_values, count TYPE i, value1 TYPE i, multi1 TYPE i, value2 TYPE i, multi2 TYPE i, value3 TYPE i, multi3 TYPE i, result TYPE i, balance TYPE i, END OF ty_values. PARAMETERS: p_1 TYPE i DEFAULT 51, p_2 TYPE i DEFAULT 82, p_3 TYPE i DEFAULT 143, p_4 TYPE i DEFAULT 1007. DATA: lt_tab TYPE TABLE OF ty_values, wa_tab TYPE ty_values, lv_max_comb_1 TYPE i, lv_max_comb_2 TYPE i, lv_max_comb_3 TYPE i, lv_max_comb TYPE i, lv_count TYPE i, lv_count1 TYPE i, lv_count2 TYPE i, lv_count3 TYPE i, lv_result TYPE i, lv_balance TYPE i, lv_next TYPE i. START-OF-SELECTION. lv_count = 0. lv_next = 1. lv_count1 = 0. lv_count2 = 0. lv_count3 = 0. DO. CLEAR: lv_result, lv_balance. lv_result = p_1 * lv_count1 + p_2 * lv_count2 + p_3 * lv_count3. lv_balance = p_4 - lv_result. IF lv_balance < 0. IF lv_next = 4. EXIT. ELSE. lv_next = lv_next + 1. CASE lv_next. WHEN 2. lv_count2 = lv_count2 + 1. lv_count1 = 0. WHEN 3. lv_count3 = lv_count3 + 1. lv_count2 = 0. lv_count1 = 0. ENDCASE. CONTINUE. ENDIF. ELSE. wa_tab-count = lv_count. wa_tab-value1 = p_1. wa_tab-value2 = p_2. wa_tab-value3 = p_3. wa_tab-multi1 = lv_count1. wa_tab-multi2 = lv_count2. wa_tab-multi3 = lv_count3. wa_tab-result = lv_result. wa_tab-balance = lv_balance. APPEND wa_tab TO lt_tab. CLEAR wa_tab. lv_count = lv_count + 1. lv_count1 = lv_count1 + 1. ENDIF. ENDDO. SORT lt_tab BY balance. lv_count = 0. LOOP AT lt_tab INTO wa_tab. lv_count = lv_count + 1. WRITE: / 'Combination ', lv_count, ': ', p_1, ' x ', wa_tab-multi1, ' + ', p_2, ' x ', wa_tab-multi2, ' + ', p_3, ' x ', wa_tab-multi3, ' = ', wa_tab-result, ' Balance: ', wa_tab-balance. ENDLOOP.
↧
Re: ABAP linear/nonlinear programming.
↧