PTA 1015 德才论(C语言实现)

这篇具有很好参考价值的文章主要介绍了PTA 1015 德才论(C语言实现)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

整体思路:

这个题并非简单的排序,因为涉及到多种分类,所以整体排序的方法不可取,还有排序方法的选择,要选择时间复杂的为(nlogn)的排序方法(因为不会超时),这里我用的是qsort函数(头文件为stdlib.h),读者需要可以自行查询用法,先把几种情况分别用不同的数组存下来,然后再对不同的结构体数组进行排序,但是要注意排序一次输出一次。

再上代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct data{
    int kaohao;
    int de;
    int cai;
};
int cmp(struct data *a,struct data *b)
{
  if(a->de + a->cai != b->de + b->cai)

    return a->de +a->cai - b->de - b->cai;

   if(a->de + a->cai == b->de + b->cai)
  {
      if(a->de != b->de)
      {
          return a->de - b->de;
      }
      else
         return b->kaohao - a->kaohao;
  }

}
int outputstudent(int m,  struct data people[])
{
        int i;
        for(i = m-1; i >= 0; i--)
        {
            printf("%d %d %d\n", people[i].kaohao, people[i].de, people[i].cai);
        }
        return 0;
}

int  main()
{
    int a,b,c,n,i,count=0,real=0,time1=0,time2=0,time3=0,time4=0,minm,maxm;
    char s1[8];
    scanf("%d%d%d",&n,&minm,&maxm);
    struct data people[n];
    struct data people1[n];
    struct data people2[n];
    struct data people3[n];
    struct data people4[n];

    while(count<n)
    {
    scanf("%d%d%d",&a,&b,&c);
     if(b>=minm&&c>=minm)
     {   people[real].kaohao=a;
         people[real].de=b;
         people[real].cai=c;
         real++;
     }
     memset(s1,0,strlen(s1));
         count++;
    }

    printf("%d\n",real);
    for(i=0;i<real;i++)
    {
        if((people[i].de)>=maxm && (people[i].cai)>=maxm)
        {
           people1[time1]=people[i];
           time1++;
        }

        else if((people[i].de)>=maxm && (people[i].cai)<maxm)
        {
            people2[time2]=people[i];
            time2++;
        }

        else if(people[i].cai<maxm&&people[i].de<maxm&&(people[i].de>=people[i].cai))
        {
            people3[time3]=people[i];
            time3++;
        }
        else
        {
            people4[time4]=people[i];
            time4++;
        }
    }
    qsort(people1,time1,sizeof(people1[0]),cmp);
    outputstudent(time1,people1);
     qsort(people2,time2,sizeof(people2[0]),cmp);
    outputstudent(time2,people2);
     qsort(people3,time3,sizeof(people3[0]),cmp);
    outputstudent(time3,people3);
     qsort(people4,time4,sizeof(people4[0]),cmp);
    outputstudent(time4,people4);
    return 0;
}

1.这个题并非简单的排序,因为涉及到多种分类,所以整体排序的方法不可取,还有排序方法的选择,要选择时间复杂的为(nlogn)的排序方法(因为不会超时),这里我用的是qsort函数(头文件为stdlib.h),读者需要可以自行查询用法,先把几种情况分别用不同的数组存下来,然后再对不同的结构体数组进行排序,但是要注意排序一次输出一次。

注:若有读者有更加简便的方法,欢迎下方留言评论与笔者交流,共同进步。

 文章来源地址https://www.toymoban.com/news/detail-406701.html

到了这里,关于PTA 1015 德才论(C语言实现)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • PTA数组及排序查找题解与解题思路

    函数题目为平台提供的裁判程序调用所完成的函数进行判题,题目规定语言为C语言 本题较为简单,考察的是如何遍历一个二维数组,只需要两个循环依次遍历其每个维度和元素即可 如何寻找最大值? 只需要在遍历每个元素的过程中,使用一个变量记录最大值,当出现更大的

    2024年02月08日
    浏览(37)
  • 【C语言】贪吃蛇实现思路详解

      贪吃蛇小游戏主要运用了链表和线程实现游戏的运行,三要素分别是:地图-蛇身移动、增加、撞墙和咬自己-在地图范围内随机生成食物。接下来分步实现: 1. 地图 1.1 ncurse图形库库 1.2 接收功能键 1.3 通过ncurse绘制地图 2. 蛇身 2.1 静态构造蛇身 2.2 动态构造蛇身 2.3 蛇身的移

    2024年02月11日
    浏览(29)
  • C语言 switch语句详细讲解 简单计算器及PTA例题季节判断,今天星期几-1(switch语句实现), 数据按需处理

    (1) 当被测试的变量等于 case 中的常量时,case 后跟的语句将被执行,直到遇到  break  语句为止。 (2)不是每一个 case 都需要包含  break 。如果 case 语句不包含  break ,控制流将会  继续  后续的 case,直到遇到 break 为止。 (3) 上面所有 case 都无法判断结果时,可用 default 代替

    2024年02月05日
    浏览(45)
  • 用C语言实现万年历的代码及思路(详细教程)

    1.当选择1的时候,输入 年 ,打印输入的这一年12月的日历。 2.当选择2的时候,输入 年-月 ,打印输入这一年这一月的日历。 实现效果: 选择1时 选择2时 C语言根据日期判断星期几(使用基姆拉尔森计算公式) 算法如下: 基姆拉尔森计算公式 W= (d+2 m+3 (m+1)/5+y+y/4-y/100+y/400)%

    2024年02月11日
    浏览(29)
  • 最小公倍数求法 (3种代码思路供参考 ) --(C语言实现)-- 详解

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 正整数A和正整数B的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求A,B的最小公倍数 输入: 输入两个正整数A,B 输出: 输出:A,B的最小公倍数 1、最小公倍数(LCM)是:能被A和B整除的最

    2024年02月06日
    浏览(35)
  • 栈和队列OJ题思路分享之栈和队列互换(C语言实现)

    💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:刷题分享⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你刷更多C语言和数据结构的题!   🔝🔝 我们紧接上一章的刷题分享来把后面两个题给搞定,它们分别是: 1. 用队列实现栈: 力扣225题— 2. 用栈实现队列: 力扣232题.

    2024年02月03日
    浏览(28)
  • FFT原理(基2DIT-FFT)及C语言编程思路及实现

    首先说明:采用的是基2时域抽取法(Decimation-In-Time FFT 简称DIT-FFT)。         FFT实际上是对DFT的一种快速实现算法,实质上就是对DFT抽取,以8点DFT为例:可以分解为两个4点DFT,在继续分解为4个两点DFT,从而缩小DFT运算量,提高运算效率。(因此首先需要理解DFT算法和它

    2023年04月10日
    浏览(24)
  • PTA-c语言 输出大写英文字母

    本题要求编写程序,顺序输出给定字符串中所出现过的大写英文字母,每个字母只输出一遍;若无大写英文字母则输出“Not Found”。 输入格式: 输入为一个以回车结束的字符串(少于80个字符)。 输出格式: 按照输入的顺序在一行中输出所出现过的大写英文字母,每个字母

    2024年02月04日
    浏览(32)
  • 【C语言】PTA——字符串比较

    编写一个函数实现两个字符串的比较,即自己写一个strcmp函数,函数原型为“int strcmp(char* p1,char* p2);”设p1指向字符串s1,p2指向字符串s2,要求当s1==s2时,函数返回值为0;若s1≠s2,则返回二者中第一个不相同字符的ASCII码差值(如\\\"BOY\\\"与\\\"BAD\\\"的第二个字母不同,\\\'O\\\'与\\\'A\\\'之差为

    2024年02月04日
    浏览(32)
  • PTA 编程题(C语言)-- 输出闰年

    输出21世纪中截止某个年份以来的所有闰年年份。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。 输入格式: 输入在一行中给出21世纪的某个截止年份。 输出格式: 逐行输出满足条件的所有闰年年份,即每个年份占一行。输入若非21世纪的年份则

    2024年02月05日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包