xdoj综合,复试筛选,数字统计排序,日期计算,开灯问题

         
复试筛选


问题描述    
考研初试成绩公布后需要对m个学生的成绩进行排序,筛选出可以进入复试的前n名学生。
排序规则为首先按照总分排序,总分相同则按英语单科成绩排序,总分和英语成绩也相同时考号小者排在前面。
现给出这m个学生的考研初试成绩,请筛选出可以进入复试的n名学生并按照排名从高到低的顺序依次输出。

输入说明    
输入为m+1行,第一行为两个整数m和n,分别表示总人数和可以进入复试人数,m和n之间用空格分隔,0<n<m<200。
接下来为m行数据,每行包括三项信息,分别表示一个学生的考号(长度不超过20的字符串)、总成绩(小于500的整数)和英语单科成绩(小于100的整数)
这三项之间用空格分隔。

输出说明    
按排名从高到低的顺序输出进入复试的这n名学生的信息。

输入样例    
5 3
XD20160001 330 65
XD20160002 330 70
XD20160003 340 60
XD20160004 310 80
XD20160005 360 75

输出样例    
XD20160005 360 75
XD20160003 340 60
XD20160002 330 70

#include <stdio.h>
#include <stdlib.h>

typedef struct{
    char num[20];
    int all;
    int eng;
}students;

int cmp(const void* a,const void* b)
{
    students* A = (students*) a;
    students* B = (students*) b;
    if(A->all == B->all)
    {
        return B->eng - A->eng;
    }
    else if((A->all == B->all) && (A->eng == B->eng))
    {
        return A->num - B->num;
    }
    else
    {
        return B->all - A->all;
    }
    
}

int main()
{
    int m=0,n=0,i=0;
    scanf("%d %d",&m,&n);
    students student[m];
    
    for(i=0;i<m;i++)
    {
        scanf("%s",&student[i].num);
        scanf("%d %d",&student[i].all,&student[i].eng);
    }
    
    qsort(student,m,sizeof(student[0]),cmp);
    
    for(i=0;i<n;i++)
    {
        printf("%s %d %d",student[i].num,student[i].all,student[i].eng);
        printf("\n");
    }
    
    return 0;
}


数字统计排序


问题描述    
给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出,次数相同时先输出值较小的数。
输入说明    
输入的第一行包含一个整数n,表示给定数字的个数。 1 ≤ n ≤ 1000。
第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。给出的数都是不超过1000的非负整数。
输出说明    
输出多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。
如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。
输入样例    
12  
5 2 3 3 1 3 4 2 5 2 3 5 
输出样例    
3 4 
2 3 
5 3 
1 1 
4 1

#include <stdio.h>
#include <stdlib.h>

typedef struct{
    int a;
    int ts;
}digits;

int cmp(const void* a,const void* b)
{
    digits* A = (digits*) a;
    digits* B = (digits*) b;
    if(A->ts == B->ts)
    {
        return A->a - B->a;
    }
    return B->ts - A->ts;
}

int main()
{
    int n=0,i=0;
    scanf("%d",&n);
    int num[n]={0};
    int count[1001]={0};
    
    for(i=0;i<n;i++)
    {
        scanf("%d",&num[i]);
        count[num[i]]++;
    }
    
    int j=0;
    digits digit[n+1];
    for(i=0;i<1001;i++)
    {
        if(count[i]!=0)
        {
            digit[j].a = i;
            digit[j].ts = count[i];
            j++;
        }
    }
    
    qsort(digit,j,sizeof(digit[0]),cmp);
    
    for(i=0;i<j;i++)
    {
        printf("%d %d",digit[i].a,digit[i].ts);
        printf("\n");
    }
    
    return 0;
}


日期计算


题目描述:
给定一个年份y和一个整数d,问这一年的第d天是几月几日?   
注意闰年的2月有29天,且满足下面条件之一的是闰年:   
1) 年份是4的整数倍,而且不是100的整数倍;
2) 年份是400的整数倍
输入描述:
输入包含两个整数y和d,y表示年份,年份在1900到2025之间(包含1900和2025)。
d表示这一年的第几天,d在1至365之间。
输出描述:
在一行输出两个整数,分别表示答案的月份和日期,以空格分隔。
输入样例:
2015 80
输出样例:
3 21

#include <stdio.h>

int main() 
{
    int y=0,d=0,i=0,t=1;
    scanf("%d%d",&y,&d); 
    int num[12]={31,0,31,30,31,30,31,31,30,31,30,31};
    
    if((y%4==0 && y%100!=0) || (y%400==0)) 
    {
        num[1]=29;
    }
    else 
    {
        num[1]=28;
    }
    
    t=d-num[0];
    while(t>0)
    {
        d -= num[i];
        i++;
        t = d-num[i];
    }
        
    printf("%d %d",i+1,d);
    return 0;
}


开灯问题 


一间教室里有n盏灯,编号从1-n,开始时全部是关闭状态,
现在有m个人进入教室,第1个人把所有灯打开,
第2个人只按下所有编号为2的倍数的开关(此时,这些灯会关闭),
第三个人按下所有编号为3的倍数的开关(此时,关闭状态的灯会打开,打开状态的灯会关闭)。
依次类推,直到所有人进入,请问最后有那些编号的灯开着。
输入描述:
输入两个整数n和m,其中m<=n<=100。
输出描述:
输出最后开着灯的编号
输入样例:
7 5
输出样例:
1 4 6 7

#include <stdio.h>

int main() 
{
    int n=0,m=0,i=0,j=0;
    scanf("%d%d",&n,&m);
    int num[n+1]={0};
    
    for(i=1;i<=m;i++)
    {
        if(i%2==1)
        {
            for(j=1;j<=n;j++)
            {
                if(j%i==0)
                {
                    if(num[j]==0)
                    {
                        num[j]=1;
                    }
                    else
                    {
                        num[j]=0;
                    }
                }
            }
        }
        else
        {
            for(j=1;j<=n;j++)
            {
                if(j%i == 0)
                {
                    if(num[j]==0)
                    {
                        num[j]=1;
                    }
                    else
                    {
                        num[j]=0;
                    }
                }
                
            }
        }
        
    }
    
    for(i=1;i<=n;i++)
    {
        if(num[i]!=0)
        {
            printf("%d ",i);
        }
    }
    
    return 0;
}

PHP经典100例.,php教材实例,从基础到实践,由浅到深... 24:经典循环例子 25:for的高级运用 26:简单的函数 27:有返回值的函数 28:有默认参数的函数 29:判断整数 30:动态调用函数 31:一个简单的数组 32给数组增加元素 33初始化数组 34获取数组中的元素 35创建一个多维数组 36PHP 4.0实现表格状打印 37实现背景颜色的改变 38文件上传 39查看PHP的环境变量 40使用文件包含 41打开本地或者远程文件 42读取文件内容 43访问文件常见属性 44调用文本文件内容 45PHP判断文件是否存在 46访问文件时间属性 47创建目录函数 48浏览目录 49取得浏览器的信息 50PHP相关信息 51常用的数值判断函数 52数组排序的使用 53常用数组函数 54常用字符串函数(一) 55常用字符串函数(二) 56常用字符串函数(三) 57编码和解码函数 58常用数学函数(一) 59常用时间函数(二) 60日期检查函数 61常用时间函数(一) 62常用时间函数(二) 63程序暂停函数 64图像函数 65session函数 66拼写检查 67循环中调用函数 68转换所有的标记为PHP 69取得页面的链接 70对分查找法 71文件上传界面 72用PHP4实现顶级域名查询 73日期合法性检查 74检查一个邮政编码 75得到100个随机数字 76得到十个随机数 77分成数组 78计算星座的函数 s 79检测OICQ用户是否在线 80检测操作系统和浏览器类型 81用PHP4连接一个mysql数据库操作的演示 82//本例是用PHP4实现向一个mysql数据表添加记录, 83//本例是用PHP4实现修改一个mysql数据表 84本例是用PHP4实现删除一个mysql数据记录 85//本例是用PHP4实现向一个ODBC数据表添加记录 86//本例是用PHP4实现向一个ODBC数据表添加记录 87用户登录,注册新用户 88用COOKIE保存投票人的投票记录 89php4+mysql 留言本 90文件上传处理 91页面浏览计数器 92链接 93在线聊天 94简单的新闻公告栏 95PHP目录树演示 96访客留言本 97实现在线投票 98世纪万年历 99php挖地雷 100文件管理系统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北の风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值