枫程序 2023-02-16 21:25 采纳率: 87.5%
浏览 147
已结题

算法,蓝桥杯pta实战训练

pta遇到的题,用C语言解决,各位智者解决一下,我已经尽力了,大一新生,有输入和输出格式样例
牛牛有N个雪球。第i个雪球 (1≤i≤N ) 的直径为 H。雪人由两个雪球组成,可以通过在下面堆叠一个雪球x和另一个不大于雪球x的雪球y来建造。此时雪人的高度等于两个雪球的直径之和。

牛牛从N个雪球 中选出四个不同的雪球,试着堆两个雪人。牛牛认为,两个雪人的身高差越小,两个雪人的关系就会越好。现在我们来帮助牛牛堆出最好的两个雪人。

编写一个程序,找出使用给定数量的N个雪球可以堆成的两个雪人之间的最小高度差。

输入格式:
第一行给出N 。
在第二行中,N个整数,每个整数H表示每个雪球的直径,用空格分开。
4≤N≤600
4≤H≤10^9
输出格式:
输出一个整数,表示可以制作的两个雪人之间的最小高度差。
输入样例

5
3 5 2 5 9

输出样例

1


样例解释:两个高度为 (2, 5) 和 (3, 5) 的雪人是最好的情况之一。|7-8| = 1

另一种情况是用 (2, 9) 和 (5, 5) 堆两个雪人。|11-10| = 1

  • 写回答

9条回答 默认 最新

  • 社区专家-Monster-XH 2023-02-16 21:36
    关注

    基于Monster 组和GPT的调写:
    这道题目可以使用贪心算法来解决。具体思路为:

    首先将所有雪球按直径从小到大排序。

    枚举所有的雪人组合,一共有 $\binom{N}{4}$ 种组合方式。

    对于每一种组合方式,将四个雪球分成两对,分别计算出两个雪人的高度。

    对两个雪人的高度差取绝对值,如果这个值比之前计算的所有值都要小,就更新最小值。

    时间复杂度为 $O(N^4)$,可能会超时,但是由于 $N$ 的范围比较小,可以通过这种方法解决。

    以下是参考实现,需要注意的是,由于直径最大可以达到 $10^9$,因此在计算两个雪球直径之和的时候,需要使用 long long 类型。

    
    #include <stdio.h>
    #include <stdlib.h>
    
    #define MAX_N 600
    #define MAX_H ((long long)1e9)
    
    int cmp(const void *a, const void *b) {
        return *(int *)a - *(int *)b;
    }
    
    int main() {
        int n, h[MAX_N];
        long long ans = MAX_H * 2;
    
        scanf("%d", &n);
        for (int i = 0; i < n; ++i) {
            scanf("%d", &h[i]);
        }
        qsort(h, n, sizeof(int), cmp);
    
        for (int i = 0; i < n - 3; ++i) {
            for (int j = i + 1; j < n - 2; ++j) {
                for (int k = j + 1; k < n - 1; ++k) {
                    for (int l = k + 1; l < n; ++l) {
                        long long a = h[i] + h[l];
                        long long b = h[j] + h[k];
                        long long diff = llabs(a - b);
                        if (diff < ans) {
                            ans = diff;
                        }
                    }
                }
            }
        }
    
        printf("%lld\n", ans);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(8条)

报告相同问题?

问题事件

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

悬赏问题

  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥170 如图所示配置eNSP
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上