PTA 乙级 1080 MOOC期终成绩
时间:2019-02-15
本文章向大家介绍PTA 乙级 1080 MOOC期终成绩,主要包括PTA 乙级 1080 MOOC期终成绩使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
如果不借助bsearch()函数实在不会做到全对…
不借助快搜函数(超时一个测试点):
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct
{
char name[25]; int p, m, f, sum;
}grade;
int cmp(const void *a, const void *b)
{
grade *aa = (grade*)a, *bb = (grade*)b;
if ((aa->sum) != (bb->sum))
return ((aa->sum) > bb->sum) ? -1 : 1;
else
return strcmp(aa->name, bb->name);
}
int main()
{
int P, M, N, cnt = 0;
grade *array;
scanf("%d %d %d", &P, &M, &N);
array = (grade*)malloc(sizeof(grade)*P);
for (int i = 0; i < P; i++)
{
grade p;
scanf("%s %d", p.name, &p.p);
if (p.p >= 200)
array[cnt++] = p;
}
for (int i = 0; i < cnt; i++)
array[i].m = -1, array[i].f = -1, array[i].sum = 0;
for (int i = 0; i < M; i++)
{
grade m;
scanf("%s %d", m.name, &m.m);
for (int j = 0; j < cnt; j++)
if (strcmp(m.name, array[j].name) == 0)
{
array[j].m = m.m; break;
}
}
for (int i = 0; i < N; i++)
{
grade n;
scanf("%s %d", n.name, &n.f);
for(int j=0;j<cnt;j++)
if (strcmp(n.name, array[j].name) == 0)
{
array[j].f = n.f; break;
}
}
for (int i = 0; i < cnt; i++)
if (array[i].m > array[i].f)
{
double s = array[i].m*0.4 + array[i].f*0.6;
if (((int)(s * 10) % 10) >= 5)
array[i].sum = (int)s + 1;
else
array[i].sum = (int)s;
}
else array[i].sum = array[i].f;
qsort(array, cnt, sizeof(grade), cmp);
for (int i = 0; i < cnt; i++)
if (array[i].sum >= 60)
printf("%s %d %d %d %d\n", array[i].name, array[i].p, array[i].m, array[i].f, array[i].sum);
return 0;
}
这是使用了C系统库函数bsearch()快搜函数的代码实现:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct
{
char name[25]; int p, m, f, sum;
}grade;
int cmp(const void *a, const void *b)
{
grade *aa = (grade*)a, *bb = (grade*)b;
if ((aa->sum) != (bb->sum))
return ((aa->sum) > bb->sum) ? -1 : 1;
else
return strcmp(aa->name, bb->name);
}
int cmp_name(const void *a, const void *b)
{
grade *aa = (grade*)a, *bb = (grade*)b;
return strcmp(aa->name, bb->name);
}
int cmp_bsearch(const void *a, const void *b)
{
grade *aa = (char*)a, *bb = (grade*)b;
return strcmp(aa, bb->name);
}
int main()
{
int P, M, N, cnt = 0;
grade *array;
scanf("%d %d %d", &P, &M, &N);
array = (grade*)malloc(sizeof(grade)*P);
for (int i = 0; i < P; i++)
{
grade p;
scanf("%s %d", p.name, &p.p);
if (p.p >= 200)
array[cnt++] = p;
}
for (int i = 0; i < cnt; i++)
array[i].m = -1, array[i].f = -1, array[i].sum = 0;
qsort(array, cnt, sizeof(grade), cmp_name);
for (int i = 0; i < M; i++)
{
grade m, *t;
scanf("%s %d", m.name, &m.m);
t = bsearch(m.name, array, cnt, sizeof(grade), cmp_bsearch);
if (t != NULL)
t->m = m.m;
}
for (int i = 0; i < N; i++)
{
grade n, *t;
scanf("%s %d", n.name, &n.f);
t = bsearch(n.name, array, cnt, sizeof(grade), cmp_bsearch);
if (t != NULL)
t->f = n.f;
}
for (int i = 0; i < cnt; i++)
if (array[i].m > array[i].f)
{
double s = array[i].m*0.4 + array[i].f*0.6;
if (((int)(s * 10) % 10) >= 5)
array[i].sum = (int)s + 1;
else
array[i].sum = (int)s;
}
else array[i].sum = array[i].f;
qsort(array, cnt, sizeof(grade), cmp);
for (int i = 0; i < cnt; i++)
if (array[i].sum >= 60)
printf("%s %d %d %d %d\n", array[i].name, array[i].p, array[i].m, array[i].f, array[i].sum);
return 0;
}
- Codeforces Round #416 (Div. 2)(A,思维题,暴力,B,思维题,暴力)
- 作为程序员的你在外行人眼里是一个怎样的群体?
- 高斯消元法(Gauss Elimination)【超详解&模板】
- [快学Python3]读写Excel - openpyxl库
- HDU 2147 kiki's game(规律,博弈)
- HDU 1847 Good Luck in CET-4 Everybody!(规律,博弈)
- [network][udp]你不要偷偷发包,我跟你讲
- [快学Python3]HTTP处理 - urllib模块
- 关小刷刷题08 – Leetcode 26. Remove Duplicates from Sorted Array 方法2、3
- C++课程设计类作业2
- C++课程设计类作业4
- [接口测试 - 基础篇] 01 你应该了解的协议基础
- 代码分享系列(1)之感知机【代码可下载】
- C++课程设计类作业3
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 不用临时的变量 优雅、高效的交换两个数方法
- SAP offline OData插件的JavaScript代码是如何调用到Android平台的Java代码的
- 一个占据SAP BSP应用占据存储空间的小工具
- 基于Golang的逃逸分析(Language Mechanics On Escape Analysis)
- SAP数据库表DDLOG的设计原理
- SAP UI5框架Component.js里extend函数的实现原理
- 冒泡排序的终极改进优化
- alpine安装sshd/ssh server
- 使用jstack检测Java应用的死锁(deadlock)状态
- 使用xdebug对php做性能分析调优
- 使用SAP Analytics Path Framework通过图表和表格方式展示CDS view数据
- ELK学习笔记之Docker Container exited with code 137
- 用这10个小技巧加速Python编程
- Dijkstra算法及其C++实现
- WPF 启动屏幕键盘