第二届“传智杯”全国大学生IT技能大赛(初赛)代码参考

本文介绍了第二届“传智杯”全国大学生IT技能大赛的初赛题目,涉及软件工程实习项目评分规则,以及三道算法题目——众数出现次数、程序员节发橙子和特殊翻转的详细描述。参赛学生需要掌握HTML、CSS、JavaScript、Vue、Python、Django等技术,并解决基于平均分的评分系统、根据成绩分配橙子的优化问题、位运算策略选择和二进制串翻转等挑战。
摘要由CSDN通过智能技术生成

软件工程实习

题目描述
某大学的《软件工程》必修课分为理论和实践部分。理论部分由该校教授完成授课;而实践部分是由第三方的公司主导,需要同学们在五周时间内自学 HTML、css、JavaScript、vue、Python、django 等技术,并组队完成一个真实的互联网商业应用。

参与这个课程的有 n(0\le n \le 1000)n(0≤n≤1000) 个学生,分成了不超过 2626 个队伍,每个队伍用 A 到 Z 来表示。每个队伍都会完成一个项目,并以队伍为单位,给所有队伍(包括自己队伍)打分,范围是 00 到 100100 的整数。

为了平息学生对这门课产生的出多问题的不满(比如工作量太大、时间过于紧张、考核方式不公平等),老师决定使用一种“看起来”很公平的方式来决定每组队伍的项目得分:

对于某个队伍,首先计算所有队伍(包括自己)给这个队伍评分的平均值,然后剔除掉和这个平均值差别超过 1515 分的评分(保证不会出现所有的评分全部被剔除的情况),最后再对剩余的评分求平均值,四舍五入取整后作为这个队伍的项目得分。

对于每一个同学,我们已经得知他们的队伍代号和理论成绩(也是 00 到 100100 分的整数)。这位同学的最后得分就是 60%60% 的理论成绩加上 40%40% 的所在队伍的项目得分,然后四舍五入取整。

现在老师想知道所有同学的分数排行。请按最后得分从高到低的顺序,输出每位同学的得分和他所在的队伍。

输入格式
第一行两个整数 nn 和 kk,分别表示学生数和队伍数。

接下来 nn 行,每行一个整数 s_is
i

和一个大写字母 c_ic
i

,表示第 ii 个选手的理论分数和队伍编号。保证队伍编号范围是从 A 开始后连续 kk 个字母中的一个。

接下来 kk 行,每行 kk 个整数。其中第 ii 行第 jj 列的整数 a_{i,j}a
i,j

表示第 ii 个队伍给第 jj 个队伍的评分,当 i=ji=j 时,就是自评。

输出格式
输出 nn 行表示答案,得分高的同学优先输出,得分相同时队伍编号较小的同学优先输出。对于每一行,先输出这位同学成绩,然后输出代表他的队伍编号的大写英文字母。

输入输出样例

输入 #1 复制
6 3
70 A
80 A
65 B
95 B
85 C
90 C
70 90 100
95 88 85
30 47 100

输出 #1 复制
93 B
92 C
89 C
76 A
75 B
70 A

说明/提示
A 组收到的分数分别是 70,95,3070,95,30,其平均分为 6565,则 95,3095,30 被作为无效成绩剔除,因此 A 组的项目得分是 7070 分。
B 组收到的分数分别是 90,88,4790,88,47,其平均分为 7575,则 4747 被作为无效成绩剔除,因此 B 组的项目得分是 8989 分。
C 组收到的分数分别是 100,85,100100,85,100,其平均分为 9595,没有打分被剔除,因此 C 组的项目得分是 9595 分。

#include <iostream>
#include <algorithm>
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <vector>
#include <cmath>

using namespace std;
const int N = 30;
struct student{
   
	int sc;
	char t;
	int sum;
	student(){
   }
	student(int sc, char ch):sc(sc), t(ch){
   }
};
int n , k;
int team[N][N];
int score[N];   // 记录每个队伍得平均值
vector<student> s;

// 计算每个队伍得平均值
void calavg(int x)
{
   
	double tmp = 0 , sum = 0;
	for(int i = 1;i <= k ;i ++)
	{
   
		tmp += team[i][x];
	}
	tmp = tmp / k;
	int cnt = 0; //计数
	for(int i = 1;i <= k ;i ++)
	{
   
		if(abs(tmp - team[i][x]) <= 15)
		{
   
			sum += team[i][x];
			cnt++;
		}
	}
	sum = sum / cnt;
	score[x] = int(round(sum)</
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值