lcs13717957980 2023-03-28 14:55 采纳率: 100%
浏览 25
已结题

求一个排列组合优选程序的编程思路

问题如下:
假设每个参数有两个属性值,例如:
参数A(5,7)
参数B(7,9)
参数C(4,10)
参数D(12,17)
现在有一个门槛值E,求第一个参数之和大于门槛值,且小于门槛值2倍的情况下,同时第二个参数之和最小的组合。
比如门槛值E为10。
那么门槛区间为10~20。
那么满足门槛区间值要求的组合有:
A+B+C(16),A+B(12),A+D(17),B+C(11),B+D(19), C+D(16),D(12) ,共有7个组合。
对应的第二个参数值之和为:
26(A+B+C),16(A+B),24(A+D),19(B+C),26(B+D),27(C+D), 17(D),这里面第二个组合A+B的第二个参数和最小(16)。
所以应该筛选输出A+B这对组合结果(即12,16)以及组合组成(即A+B)。

之前尝试用数组操作的方式解决,但是发现在数组中如果出现重复数字,例如A+B组合为12,D也为12,即无法识别该数字的组合来源。

所以现在没有解决思路了,想看下各位有没有什么思路。谢谢!

  • 写回答

3条回答 默认 最新

  • 瞬间的未来式 2023-03-28 15:06
    关注

    chatgpt:
    下面是完整的C语言代码实现:

    #include <stdio.h>
    
    int main() {
        int para[4][2] = {{5, 7}, {7, 9}, {4, 10}, {12, 17}};
        int threshold = 10;
        int min_sum = 2 * threshold;
        int min_idx = -1;
        for (int i = 0; i < 4; i++) {
            for (int j = i + 1; j < 4; j++) {
                int sum = para[i][0] + para[j][0];
                if (sum > threshold && sum < min_sum) {
                    min_sum = sum;
                    min_idx = i * 10 + j;
                }
            }
        }
        if (min_idx == -1) {
            printf("No suitable combination found.\n");
        } else {
            int idx1 = min_idx / 10;
            int idx2 = min_idx % 10;
            printf("Combination: %c+%c\n", 'A' + idx1, 'A' + idx2);
            printf("Result: %d,%d\n", min_sum, para[idx1][1] + para[idx2][1]);
        }
        return 0;
    }
    
    
    

    代码中的para数组表示参数的属性值,threshold表示门槛值,min_sum表示第一个参数之和最小的组合的第一个参数之和,min_idx表示第一个参数之和最小的组合在para数组中的下标,-1表示没有找到符合条件的组合。


    在代码中,使用了两个循环来遍历所有可能的组合,对于每个组合,计算第一个参数之和sum,并检查sum是否满足要求。如果满足,就更新min_sum和min_idx。


    最后,判断min_idx是否为-1,如果是,则输出提示信息;否则,计算出组合中每个参数的下标,输出组合和结果。


    注意:本代码中假设参数个数为4,如果参数个数增加,需要相应地修改代码

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 4月22日
  • 已采纳回答 4月14日
  • 修改了问题 3月28日
  • 创建了问题 3月28日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改