南极人探险 2021-12-28 09:31 采纳率: 87.5%
浏览 110
已结题

排序重构问题 用C/C++实现

令A为一个由N个已特殊排序数组成的数列:A1 A2 … AN,其中A1=0。令B为N(N-1)/2个数(定义为Bij=Ai-Aj(i>j))组成的数列。例如,A=0 1 5 8,那么D=1 3 4 5 7 8。请完成:

  1. 编写程序,根据A构造D;
    2)编写程序,构造与D相对应的某一个数列A,注意A不是唯一的。
  • 写回答

1条回答 默认 最新

  • bobhuang 2021-12-28 10:40
    关注

    题目应该是笔误了,莫名出现了D,似乎应该是B。那么按B来理解D,思路如下:

    1. 用两重循环, i=[N,2], j=[i-1,1], 求出所有Bij, 再按从小到大进行排序,构成数列B。
    2. 因为限定了A1=0, 所以B中最大数必然是AN,其他数必然存在成对出现的Bi + Bj = AN。找出N - 2对这样的数,每对取其中一个,再加上0和AN,就能构造出一个备选的数列A。再将备选数列按题设算法构造数列B'。如果B'与B一致,就可以判断当前的备选数列A满足条件。备选数列A的可能性有2^(N-2)种。

    以例子中的数据为例,
    8 = 1+7 = 3+5.
    如果取 1和5,就得到 0 1 5 8. 验证可以推导出 1 3 4 5 7 8. 匹配。
    如果取 3 和 7, 就得到 0 3 7 8. 验证可以推导出 1 3 4 5 7 8. 匹配。
    如果取1和3, 就得到 0 1 3 8. 验证推导出 1 2 3 5 7 8. 不匹配。
    如果取 7 和5 ,就得到 0 5 7 8, 验证推导出 1 2 3 5 7 8. 不匹配。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 1月5日
  • 已采纳回答 12月28日
  • 创建了问题 12月28日

悬赏问题

  • ¥30 VMware 云桌面水印如何添加
  • ¥15 用ns3仿真出5G核心网网元
  • ¥15 matlab答疑 关于海上风电的爬坡事件检测
  • ¥88 python部署量化回测异常问题
  • ¥30 酬劳2w元求合作写文章
  • ¥15 在现有系统基础上增加功能
  • ¥15 远程桌面文档内容复制粘贴,格式会变化
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”