今日头条2017校招(出题数目)

题目描述
									

头条的2017校招开始了!为了这次校招,我们组织了一个规模宏大的出题团队。每个出题人都出了一些有趣的题目,而我们现在想把这些题目组合成若干场考试出来。在选题之前,我们对题目进行了盲审,并定出了每道题的难度系数。一场考试包含3道开放性题目,假设他们的难度从小到大分别为a, b, c,我们希望这3道题能满足下列条件:

a<= b<= c
b - a<= 10
c - b<= 10

所有出题人一共出了n道开放性题目。现在我们想把这n道题分布到若干场考试中(1场或多场,每道题都必须使用且只能用一次),然而由于上述条件的限制,可能有一些考试没法凑够3道题,因此出题人就需要多出一些适当难度的题目来让每场考试都达到要求。然而我们出题已经出得很累了,你能计算出我们最少还需要再出几道题吗?

输入

输入的第一行包含一个整数n,表示目前已经出好的题目数量。

第二行给出每道题目的难度系数 d1, d2, …, dn。

样例输入

4

20 35 23 40

输出

输出只包括一行,即所求的答案。

样例输出

2

#include <stdio.h>
#include <stdlib.h>
int comp(const void *a,const void *b)
{
  return *(int*)a-*(int*)b;
}
int main()
{
  int n;
  scanf("%d",&n);
  int* problem=(int*)malloc(n*sizeof(int));
  int i,add=0;
  for(i=0;i<n;++i)
  {
    scanf("%d",&problem[i]);
  }
  qsort(problem,n,sizeof(int),comp);
  i=0;
  while(i<n)
  {
    if((problem[i+1]-problem[i]<=10)&&(i+1<n))
    {
       if((problem[i+2]-problem[i+1]<=10)&&(i+2<n))
       {
         i+=3;
       }
       else
       {
         i+=2;
         add++;
       }
    }
    else
    {
      if((problem[i+2]-problem[i+1]<=10)&&(i+2<n))
      {
        i+=2;
        add++;
      }
      else
      {
        ++i;
        add+=2;
      }
    }
  }
  printf("%d",add);
}


其中的qsort函数为C语言中的快速排序函数:
void qsort(void*base,size_t num,size_t width,int(__cdecl*compare)(const void*,const void*));
各参数:1 待排序数组首地址 2 数组中待排序元素数量 3 各元素的占用空间大小 4 指向函数的指针
比如:对一个长为1000的数组进行排序时,int a[1000]; 那么base应为a,num应为 1000,width应为 sizeof(int),comp函数随自己的命名。
qsort(a,1000,sizeof(int),comp);
其中comp函数应写为:
1
2
3
4
int  comp( const  void *a, const  void *b)
{
return  *( int *)a-*( int *)b;
}
上面是由小到大排序,return *(int *)b - *(int *)a; 为由大到小排序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值