南极人探险 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日

悬赏问题

  • ¥15 HFSS设计小型化180度耦合器
  • ¥15 使用CInternetSession,CHttpFile读取网页文件时有些电脑上会卡住怎么办?
  • ¥15 水下机器人的半物理仿真研究
  • ¥15 微服务假死,一段时间后自动恢复,如何排查处理
  • ¥50 webrtc-streamer TCP rtsp
  • ¥15 cplex运行后参数报错是为什么
  • ¥15 之前不小心删了pycharm的文件,后面重新安装之后软件打不开了
  • ¥15 vue3获取动态宽度,刷新后动态宽度值为0
  • ¥15 升腾威讯云桌面V2.0.0摄像头问题
  • ¥15 关于Python的会计设计