最低硬币找零

2020-08-15 21:27发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家们,

我正在尝试解决SAP ABAP中的最小硬币更换问题 https://www.geeksforgeeks.org/find-minimum-number-of-coins-that-make-a-change/。 我将不得不动态创建一个矩阵表。 我搜索了SCN并发现了几篇文章,但是所有内容都是关于创建字段目录的。 使用" For"构造函数创建矩阵会创建一个深层结构。

https://help.sap.com/doc/ abapdocu_751_index_htm/7.51/zh-cn/abencond_iteration_matrix_abexa.htm

https://blogs.sap.com/2013/06/11/dynamic-internal-table-iilustrated-with-an-example-of-creating-the-transpose-of-internal -table/

是否有一种简单的方法可以在ABAP中创建动态矩阵表?

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


专家们,

我正在尝试解决SAP ABAP中的最小硬币更换问题 https://www.geeksforgeeks.org/find-minimum-number-of-coins-that-make-a-change/。 我将不得不动态创建一个矩阵表。 我搜索了SCN并发现了几篇文章,但是所有内容都是关于创建字段目录的。 使用" For"构造函数创建矩阵会创建一个深层结构。

https://help.sap.com/doc/ abapdocu_751_index_htm/7.51/zh-cn/abencond_iteration_matrix_abexa.htm

https://blogs.sap.com/2013/06/11/dynamic-internal-table-iilustrated-with-an-example-of-creating-the-transpose-of-internal -table/

是否有一种简单的方法可以在ABAP中创建动态矩阵表?

付费偷看设置
发送
5条回答
Violet凡
1楼 · 2020-08-15 22:26.采纳回答

嗨,

根据建议,我在"值"上使用" For"来创建矩阵来解决问题。 使用了

中的示例代码

https://help.sap.com/doc/ abapdocu_751_index_htm/7.51/zh-cn/abencond_iteration_matrix_abexa.htm

葫芦娃快救爷爷
2楼-- · 2020-08-15 22:19

您说"使用" For"构造函数创建矩阵会创建一个深层结构。"

如果 "深度结构"是ABAP的正式术语(请参见词汇表-深度 ),你错了。 它可能会创建"扁平"或"深层"结构,即任何类型的结构...

可以说,但是对于您的问题并不重要,因为" For"会创建基于 关于独立且完整/非通用的数据类型(请参阅ABAP文档词汇表-独立数据类型词汇表 -完整的数据类型)。

您要查找的是运行时类型创建(请参阅ABAP文档词汇表-运行时类型创建)。

compass1988
3楼-- · 2020-08-15 22:14

我个人更喜欢使用结构较深的矩阵 (表格中的表格),但是您当然也可以创建一个带有必要量的表格类型 ry列动态。

  • 首先,您必须为列提供字段名称,并且它们不能以数字开头,因此可以选择字母或下划线'_x'。
  • 尤其是访问此表不是那么整洁:
    ASSIGN组件的结构 [x]到
    vs.
    ASSIGN
    [x ] [y] TO
  • 此外,表中带有表的矩阵可以"轻松地"放大或缩短,而具有固定结构的矩阵则需要重新创建
  • < li>如果您希望获得除固定字段表或表中表之外的解决方案,我目前会让您失望,但我也不确定您究竟在寻找什么。

    但这将是完成此工作的示例代码。 它可能不像您希望的那样"简单",但仍然可能以一种或另一种方式缩短。 两种逻辑(表中带表的矩阵和表带struc的表)都以这种编码形式呈现:

     REPORT zdemo_matrix。
    
     类演示定义。
       公共部分。
         分类方法:主要。
       专用部分。
         类别数据:
           TYPE I行,
           TYPE I列,
           x TYPE i VALUE 1,
           y类型i值1。
         CLASS-METHODS初始化。
     ENDCLASS。
    
     类演示实施。
       方法主要。
         initialize()。
    
     *根据表格中的表格创建矩阵
         类型:带有空键的字符串的t_column类型标准表,
                t_rows带空键的t_column的标准类型表。
    
         DATA(matrix_tab)= VALUE t_rows(
             FOR i = 0直到i>列-1(
               VALUE t_column(
                 FOR j = 1直到j>行
                   (sy-abcde + i(1)&& | {j} |))))。
     *基于表中创建的表的矩阵
    
     *根据具有结构的表创建矩阵
         数据抽象类型TYPE引用到cl_abap_datadescr。
         数据行TYPE int4。
         DATA列TYPE int4。
    
         DATA dref TYPE REF TO数据。
         字段符号类型标准表。
         abaptype?= cl_abap_datadescr => describe_by_name('STRING')。  "单元格类型定义
         DATA(comp_tab)= VALUE abap_component_tab(FOR i = 0直到i> =列"根据单元格创建行组件
                          (名称= sy-abcde + i(1)类型= abaptype))。  "选择单个字母作为列名
                                                                      ",目前限制为26栏
         数据(structype)= cl_abap_structdescr => create(comp_tab)。 创建行结构
         DATA(tabletype)= cl_abap_tabledescr => create("基于行结构创建表
                           p_line_type = structype p_table_kind ='S')。
         CREATE DATA dref TYPE HANDLE表类型。
         ASSIGN dref-> *至。  "矩阵表(尚无行)
         做TIME次。  "为带有列的矩阵创建行
           行=行+ 1。
           将初始行添加到分配字段符号()。
           做TIME栏。  "创建初始xy值
             列= sy-index-1。
             将结构的组件sy-index分配给FIELD-SYMBOL()。
              = sy-abcde + column(1)&& | {行} |。
           ENDDO。
         ENDDO。
     *基于已创建结构的表格的矩阵
    
     *以表格形式访问并显示矩阵
         ASSIGN matrix_tab [x] [y]至。  "表格中表格的访问矩阵单元
         cl_demo_output => write_data()。
         cl_demo_output => write_data(matrix_tab)。
    
     *使用struc访问并显示矩阵为表格
         将结构 [x]分配给。  "具有结构的表的访问矩阵单元
         cl_demo_output => write_data()。
         cl_demo_output => write_data()。
    
         cl_demo_output => display()。
    
       终结法。
       方法初始化。
         行= 100。
         列= strlen(sy-abcde)。
         cl_demo_input => add_field(CHANGING field = x)。
         cl_demo_input => add_field(CHANGING field = y)。
         cl_demo_input => request()。
       终结法。
     ENDCLASS。
    
     选择开始。
       demo => main()。
     

    wang628962
    4楼-- · 2020-08-15 22:03

    嗨,

    感谢您解释差异,并且" For"构造函数比实际创建运行时类型创建更易于使用。 显然可以轻松访问" For"矩阵创建。

    xfwsx85
    5楼-- · 2020-08-15 22:11

    有关措辞的补充说明。 当我重新阅读我的最后一条评论时,"" For"构造函数创建了一个结构",让我震惊,因此我想澄清一下我的最后一条评论。

    " For"不是构造函数(运算符 ?),只有"值","减少"等是构造函数运算符。 最终," for"是构造函数表达式的可能元素。 准确地说," For"是一个内部表上的循环,用于附加或初始化另一个内部表或将其简化为任何类型的数据对象。

    一周热门 更多>

    向帮助了您的网友说句感谢的话吧!