这是我开始ACM之路的第一道题,看到后觉得很简单,但是因为基础知识不完备,还是跳了坑
先附一下题目链接
https://vjudge.net/contest/206817#problem/A
http://codeforces.com/problemset/problem/337/A
简单说下题目,就是需要在给定的一组数据中,找出指定个数的数据,使得找出的这组数据最值差是所有可能的数据中最小的。
题目不是很难,稍微想一下就有了基本思路,无非是先对给定数据进行排序,然后再对需要找出的数据进行遍历,找出其中符合要求的一组。
有了简单思路就开始码代码,便有了初步的思路
#include<stdio.h>
int main(void)
{
int m,n;
int Fi[99];
scanf("%d%d",&n,&m);
int i,j,t,fabs;
for ( i = 0 ; i < m ; i++ )
{
scanf("%d",&Fi[i]);
}
for ( i = 0 ; i < m-1 ; i++ )
{
for ( j = i+1 ; j < m ; j++ )
{
if ( Fi[i] > Fi[j] )
{
t=Fi[i];
Fi[i]=Fi[j];
Fi[j]=t;
}
}
}
fabs = Fi[n-1]-Fi[0];
for ( i = 0 ; i <= m-n ; i++ )
{
j=i+n-1;
if ( fabs > Fi[j]-Fi[i] )
fabs=Fi[j]-Fi[i];
}
printf("%d",fabs);
return 0;
}
这个也很通俗易懂了,但是用时会很长,关键在于这个排序算法,是
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
int main()
{
int n,m,i,a[55],Min,s;
while(~scanf("%d%d",&m,&n))
{
for(i = 0; i<n; i++)
scanf("%d",&a[i]);
sort(a,a+n);
Min = 10000;
m = m-1;
for(i = m; i<n; i++)
{
s = a[i]-a[i-m];
if(s<Min)
Min = s;
}
printf("%d\n",Min);
}
return 0;
}
主要差别就在于这个排序算法了,用了sort之后可以大大减少时间复杂度。。。
从此也开始了我的c+stl的学习之路
最后吐槽下,有些题目没有明确说明需要用到eof,但是就是得加上才能过,好烦哦