L1-8 vivo50!

又到了一年一度评奖学金的时候,duoka迫切地想知道班里有谁能够获得奖学金,并打算让这些同学v她50吃开封菜。但评奖名单迟迟未发布,于是duoka找到了班里同学的绩点和评分等信息,决定先自己算一算有哪些同学能获得奖学金。

duoka学校的奖学金是将同学们按照总评成绩进行排名,在本学年未挂过科的同学中,总评排名前K名的同学能够获得数额不等的奖学金。

同学们的总评成绩由以下几个部分构成:绩点分,德育分,智育分,是否挂科。

绩点分:学生的绩点一般表示为五分制绩点,绩点分 = (五分制绩点*10)+50。

德育分:每位同学有70分的基础分,再加上该同学的申报分数即为总德育分,但德育分总计不能超过100分。

智育分:无基础分,同学的申报分数即为智育分得分,且无上限。

总评成绩的计算公式为:

总评 = (绩点分+智育分)∗0.7+德育分∗0.3。

注意:如果该同学有挂科情况,则无论总评成绩为多少,都不参与奖学金评定。

请你输出能够获得奖学金的同学的排名、姓名和总评成绩。

输入格式:

第一行输入两个整数,分别表示班里学生人数N(1≤N≤2×104),奖学金名额K(1≤K≤100)。

之后N行每行输入一组学生的信息,格式如下:

姓名 五分制绩点 德育分申报分 智育分申报分 是否挂科

其中姓名为长度不超过10、不含空格的由小写字母组成的字符串,五分制绩点为闭区间 [0,5] 内的一位浮点数(一位小数),德育分申报分和智育分申报分均为区间 [0,100] 内的整数,是否挂科用整数01表示,0表示有挂科,1表示没有挂科。

每样信息之间均以空格分隔。题目保证没有重名的同学。

输出格式:

每行按总评成绩非升序输出同学的排名、姓名和总评成绩(保留一位小数),期间以1个空格分隔。

注意:总评成绩相同的同学享有并列的排名,排名并列时,按照姓名的字典序升序输出。

输入样例:

10 5
aaaaa 3.9 40 5 1
bbbbb 4.0 50 0 1
ccccc 4.2 20 48 0
ddddd 3.8 20 1 1
eeeee 2.7 30 50 1
fffff 3.2 30 2 1
ggggg 3.6 25 6 1
hhhhh 2.8 25 14 1
iiiii 3.6 20 10 0
jjjjj 3.9 41 1 1

输出样例:

1 eeeee 118.9
2 aaaaa 95.8
3 bbbbb 93.0
3 jjjjj 93.0
5 ggggg 92.9
5 hhhhh 92.9
#include<iostream>
#include<cmath>
#include<algorithm>

using namespace std;


int n,k;

struct ty
{
	string name;
	double jidian;
	int deyv;
	int zhiyv;
	int p;
	double zong;
	bool operator<(const ty &a)const
	{
		if(abs(zong-a.zong)<0.01)
		{
			return name<a.name;
		}
		return zong>a.zong;
		
	}
};

ty stu[20010];
int cnt;


int main()
{
	cin>>n>>k;
	string name;double jidian;int zhiyv,deyv,gua;
	for(int i=1;i<=n;++i)
	{
		cin>>name>>jidian>>deyv>>zhiyv>>gua;
		if(gua==0)continue;
		
		if(deyv>=30)deyv=100;
		else deyv=70+deyv;
		
		jidian=jidian*10+50;
		
		ty tmp;
		tmp.deyv=deyv,tmp.name=name,tmp.zhiyv=zhiyv,tmp.jidian=jidian,tmp.zong=(jidian+zhiyv)*0.7+deyv*0.3;	
	    stu[++cnt]=tmp;
	}
	
	if(cnt==1)
	{
		cout<<1<<" "<<stu[1].name<<" ";
		printf("%.1f",stu[1].zong);
		return 0;
	}
	
	sort(stu+1,stu+1+cnt);
	
	
	stu[1].p=1;
	
	
	 
	
	for(int i=2;i<=cnt;++i)
	{
		if(stu[i-1].zong-stu[i].zong<0.01)
		{
			stu[i].p=stu[i-1].p;
		}
		else
		{
			stu[i].p=i;
		}
	}
	
	for(int i=1;stu[i].p<=k&&i<=cnt;++i)
	{
		cout<<stu[i].p<<" "<<stu[i].name<<" ";
		printf("%.1f",stu[i].zong);
		cout<<endl;
	}
	
	return 0;
}



 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个可能的实现: ```c #include <stdio.h> #include <wiringPi.h> #define LED_COUNT 8 int main() { wiringPiSetup(); int pins[LED_COUNT] = {0, 1, 2, 3, 4, 5, 6, 7}; // 初始化所有 LED 的引脚为输出模式 for (int i = 0; i < LED_COUNT; i++) { pinMode(pins[i], OUTPUT); } // ① L1-L8 全部一起闪烁三次 for (int i = 0; i < 3; i++) { for (int j = 0; j < LED_COUNT; j++) { digitalWrite(pins[j], HIGH); } delay(500); for (int j = 0; j < LED_COUNT; j++) { digitalWrite(pins[j], LOW); } delay(500); } // ② L1 闪烁三次 for (int i = 0; i < 3; i++) { digitalWrite(pins[0], HIGH); delay(500); digitalWrite(pins[0], LOW); delay(500); } // ③ L1---L8--L1-L8 往返流水灯三次 for (int i = 0; i < 3; i++) { for (int j = 0; j < LED_COUNT; j++) { digitalWrite(pins[j], HIGH); delay(100); digitalWrite(pins[j], LOW); } for (int j = LED_COUNT - 2; j > 0; j--) { digitalWrite(pins[j], HIGH); delay(100); digitalWrite(pins[j], LOW); } } // ④ 从最两端的两个 LED 流向中间,再流向两边,重复三次 for (int i = 0; i < 3; i++) { digitalWrite(pins[0], HIGH); digitalWrite(pins[LED_COUNT - 1], HIGH); delay(500); for (int j = 1; j < LED_COUNT - 1; j++) { digitalWrite(pins[j], HIGH); delay(100); digitalWrite(pins[j], LOW); } delay(500); for (int j = LED_COUNT - 2; j > 0; j--) { digitalWrite(pins[j], HIGH); delay(100); digitalWrite(pins[j], LOW); } digitalWrite(pins[0], LOW); digitalWrite(pins[LED_COUNT - 1], LOW); delay(500); } return 0; } ``` 这个程序使用了 WiringPi 库来控制 GPIO 引脚,需要在编译时链接该库,例如: ``` gcc -o led led.c -lwiringPi ``` 其中 `-lwiringPi` 表示链接 WiringPi 库。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值