1015. 德才论 (25)

题目:http://www.patest.cn/contests/pat-b-practise/1015

代码:

#include <stdio.h>

int main()
{
  int n,l,h,k,q,m;
  long a[100][5],b[100][4],temp;
  int i,j,total_num=0;

  scanf("%d %d %d",&n,&l,&h);
  //输入,并且计算类此和各个总分
  for (i=0;i<n;i++)
  {
    for (j=0;j<3;j++)
      scanf("%d",&a[i][j]);
    if (a[i][1]>=l&&a[i][2]>=l)
    {
      if (a[i][1]>=h&&a[i][2]>=h)
        a[i][3] = 1;
      else if (a[i][1]>=h&&a[i][2]<h)
        a[i][3] = 2;
      else if(a[i][1]<h&&a[i][2]<h&&(a[i][1]>=a[i][2]))
        a[i][3] = 3;
      else
        a[i][3] = 4;
    }
    else
      a[i][3] = 0;
    a[i][4] = a[i][1] + a[i][2];
  }

  //输出几个合格
  for (i=0;i<n;i++)
  {
    if (a[i][3]!=0)
      total_num++;
  }
  printf("%d\n",total_num);

  //按照1234四挡依次输出
  for (m=1;m<=4;m++)
  {
    j = 0;
    for (i=0;i<n;i++)
    {
      if(a[i][3]==m)
      {
        b[j][0] = a[i][0];
        b[j][1] = a[i][1];
        b[j][2] = a[i][2];
        b[j][3] = a[i][4];
        j++;
      }
    }
    for (i=0;i<j;i++)
    {
      for (k=i+1;k<j;k++)
      {
        if (b[i][3]<b[k][3])
        {
          for (q=0;q<4;q++)
          {
            temp = b[i][q];
            b[i][q] = b[k][q];
            b[k][q] = temp;
          }
        }
        else if (b[i][3]==b[k][3])
        {
          if (b[i][1]<b[k][1])
          {
            for (q=0;q<4;q++)
            {
              temp = b[i][q];
              b[i][q] = b[k][q];
              b[k][q] = temp;
            }
          }
          else if (b[i][1]==b[k][1])
          {
            if (b[i][0]>b[k][0])
            {
              for (q=0;q<4;q++)
              {
                temp = b[i][q];
                b[i][q] = b[k][q];
                b[k][q] = temp;
              }
            }
          }
        }
      }
    }
    for (i=0;i<j;i++)
      printf("%ld %d %d\n",b[i][0],b[i][1],b[i][2]);
  }

  return 0;
}

本题还有些问题,vs上结果都对的,pat跑出来有几个段错误,暂时查不出问题,过段时间再做做看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值