IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 杭电1084 (C++) -> 正文阅读

[C++知识库]杭电1084 (C++)

这题的题目意思不难理解,关键在于获得它们的排名他,还要按照输入顺序输出得分。
要点
①创建结构数组s储存每个学生做对的题数和用的时间。
②拷贝一个①里面的结构数组a,然后对a排序,得到每个学生的排名,排名从0开始。0是最高的排名。
③判断(当前排名-比当前答对题数多的人数)是否大于或等于答对当前题数的一半人数。

#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
struct student{
	int ac;//做对的题数 
	int h;//小时 
	int min;//分钟 
	int sec;//秒 
};
student s[100],a[100];

bool cmp(student x,student y);
//重载等于号 
bool operator==(const student&x,const student&y){
	return (x.ac==y.ac&&x.h==y.h&&x.min==y.min&&x.sec==y.sec);
}
int main()
{
	//struct student a[100];
	int num,i,j;
	int p1,p2,p3,p4,p5,top,f;
	while(scanf("%d",&num)!=EOF&&num>=0){
		p1=0;p2=0;p3=0;p4=0;p5=0;
		for(i=0;i<num;i++){
			scanf("%d",&s[i].ac);
			scanf("%d:%d:%d",&s[i].h,&s[i].min,&s[i].sec);
			a[i].ac=s[i].ac;//把s[]拷贝给a[] 
			a[i].h=s[i].h;a[i].min=s[i].min;a[i].sec=s[i].sec; 
		}
		sort(a,a+num,cmp);//对a[i]排序,为了得到s[i]的对应排名 
		for(i=0;i<num;i++){//统计算对1~5题的数目 
			if(s[i].ac==5) p5++;
			if(s[i].ac==4) p4++;
			if(s[i].ac==3) p3++;
			if(s[i].ac==2) p2++;
			if(s[i].ac==1) p1++;	
		}
		for(i=0;i<num;i++){
			if(s[i].ac==5) printf("100\n");
			if(s[i].ac==4){
				for(j=0;j<num;j++){//找到s[i]的排名 ,排名从0开始,0排名是最高的 
					if(s[i]==a[j])  top=j;
				}
				f=p4/2;//当前答对题数的一半人数 
				if(top-p5>=f) printf("90\n");//当前做对题数的排名-比它做对多的题数的人数 
				else printf("95\n");
			}
			if(s[i].ac==3){
				for(j=0;j<num;j++){
					if(s[i]==a[j])  top=j;
				}
				f=p3/2;
				if(top-p5-p4>=f) printf("80\n");
				else printf("85\n");
			}
			if(s[i].ac==2){
				for(j=0;j<num;j++){
					if(s[i]==a[j])  top=j;
				}
				f=p2/2;
				if(top-p5-p4-p3>=f) printf("70\n");
				else printf("75\n");
			}
			if(s[i].ac==1){
				for(j=0;j<num;j++){
					if(s[i]==a[j])  top=j;
				}
				f=p1/2;
				if(top-p5-p4-p3-p2>=f) printf("60\n");
				else printf("65\n");
			}
			if(s[i].ac==0) printf("50\n");
		}
		printf("\n");
	}
}
bool cmp(student x,student y)
{
	if(x.ac!=y.ac) return x.ac>y.ac;
	if(x.h!=y.h) return x.h<y.h;
	if(x.min!=y.min) return x.min<y.min;
	else return x.sec<y.sec;
}
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-26 11:56:22  更:2021-08-26 11:58:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 16:58:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码