欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 美景 > 传智杯 第六届—B

传智杯 第六届—B

2024/10/24 15:19:17 来源:https://blog.csdn.net/weixin_66512566/article/details/142783662  浏览:    关键词:传智杯 第六届—B

题目:

        擂台赛要开始了,现在有 n 名战士,其中第 i 名战士的战斗力为 ai​。现在准备从这些战士中挑两名战士进入擂台赛进行对战,由于观众们更喜欢看势均力敌的比赛,所以我们也要挑选两个战斗力尽可能相近的战士进行参赛。那么现在请问,战斗力最接近的两名战士,战斗力之差为多少?

输入描述:

        第一行输入一行一个正整数 n 表示战士的数量。

        第二行输入 n个正整数表示每名战士的战斗力。(1≤n≤10^5,1≤ai≤10^9)

输出描述:

        输出一行一个正整数表示答案。

示例1

输入:

3
3 5 5

输出:

0

说明:

        选择两名战斗力为 5 的战士,战斗力之差为 0。

解题思路:

        本题是想要找出战斗力最小的差,所以需要先将每个战士的战斗力记录下来,我们将每个战士i的战斗力存储在数组下标为i的数组中,并通过两个比较(两次for循环显示超时,所以采用先排序后比较的方法)来得到最小的战斗力差,并存储在min_combat中。

注意:

        ①由于需要注意时间,如果在两两对比的时候使用两个for循环来进行比较,就会出现运行超时的情况,对这个问题的解决方法是先利用sort函数进行排序(详见C++算法:sort()函数_c++ sort函数-CSDN博客),再进行比较即可。

代码:

#include<iostream>
#include<algorithm>
using namespace std;
#define MAX1 100000
#define MAX2 1000000000int main()
{int num;    //战士的个数cin>>num;int soldier[MAX1] = {0};for(int i=0;i<num;i++){cin>>soldier[i];}//比较战斗力int min_combat = MAX2;利用两个for循环进行两两比较//for(int i=0;i<num-1;i++)//{//    for(int j=i+1;j<num;j++)//    {//        int compute_combat = soldier[i] - soldier[j];//        if(compute_combat < 0)   //为正//        {//            compute_combat = -compute_combat;//        }//        //保存战斗力更小的数//        min_combat = min_combat < compute_combat?min_combat:compute_combat;//    }//}//先排序,再与相邻的数进行比较sort(soldier,soldier+num);//比较for(int i=0;i<num-1;i++){int compute_combat = soldier[i] - soldier[i+1];if(compute_combat < 0)   //为正{compute_combat = -compute_combat;}min_combat = min_combat < compute_combat?min_combat:compute_combat;}cout<<min_combat<<endl;system("pause");return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com