1083 List Grades (25 point(s))

本文介绍了一个简单的排序问题,要求根据学生的成绩将记录进行非递增排序,并筛选出成绩在特定区间内的学生记录。通过使用C++中的结构体和sort函数,可以轻松实现这一功能。

1083 List Grades (25 point(s))

Given a list of N student records with name, ID and grade. You are supposed to sort the records with respect to the grade in non-increasing order, and output those student records of which the grades are in a given interval.

Input Specification:

Each input file contains one test case. Each case is given in the following format:

N
name[1] ID[1] grade[1]
name[2] ID[2] grade[2]
... ...
name[N] ID[N] grade[N]
grade1 grade2

where name[i] and ID[i] are strings of no more than 10 characters with no space, grade[i] is an integer in [0, 100], grade1 and grade2 are the boundaries of the grade's interval. It is guaranteed that all the grades are distinct.

Output Specification:

For each test case you should output the student records of which the grades are in the given interval [grade1grade2] and are in non-increasing order. Each student record occupies a line with the student's name and ID, separated by one space. If there is no student's grade in that interval, output NONE instead.

Sample Input 1:

4
Tom CS000001 59
Joe Math990112 89
Mike CS991301 100
Mary EE990830 95
60 100

Sample Output 1:

Mike CS991301
Mary EE990830
Joe Math990112

Sample Input 2:

2
Jean AA980920 60
Ann CS01 80
90 95

Sample Output 2:

NONE

简单排序题。对于没给范围的题,申请一个动态结构体数组来完成。

#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
struct record {
	string name;
	string id;
	int grade;
	bool operator < (const record &other) const{
		return grade>other.grade;
	}
};

int main(void){
	int n,g1,g2;cin>>n;
	record *R=new record[n];
	for(int i=0;i<n;i++) cin>>R[i].name>>R[i].id>>R[i].grade; 
	sort(R,R+n);
	cin>>g1>>g2;
	bool flag = false;
	for(int i=0;i<n;i++){
		if(R[i].grade>=g1&&R[i].grade<=g2){
			flag = true; 
			cout<<R[i].name<<" "<<R[i].id<<endl; 
		}
	}
	if(!flag) cout<<"NONE"<<endl;
	return 0;
}

 

#综合成绩df_grades、任务点完成详情df_point、章节测验统计df_quizzes、考试统计 df_grades=pd.read_excel(r'E:\20241171-专业1_统计一键导出.xlsx',sheet_name='综合成绩',skiprows=2) 学生姓名 学号/工号 院系 专业 班级 章节任务点(5%) 章节测验(10%) 作业(40%) 考试(30%) 签到(5%) 课程积分(10%) 综合成绩 0 学生1 2024117101 学院1 专业1 20241171 3.07 4.96 28.8 19.5 4.33 5 65.66 1 学生2 2024117102 学院1 专业1 20241171 4.77 9.18 36.0 16.5 4.67 10 81.12 2 学生3 2024117103 学院1 专业1 20241171 5.00 8.35 36.0 20.7 4.67 10 84.72 3 学生4 2024117104 学院1 专业1 20241171 4.89 8.82 36.0 16.2 4.6 df_point['学号/工号'] = df_point['学号/工号'].astype(int) # 将"已完成"替换为1,"未完成"替换为0 df_point = df_point.replace({'已完成':1, '未完成': 0}) merged_df = pd.merge(df_grades, df_point, on='学号/工号', how='left')merged_df = merged_df.drop(columns=['学生姓名', '院系', '专业', '班级'])#计算任务完成率 task_columns = [col for col in merged_df.columns if col.endswith('.mp4') or col.endswith('.pptx')] merged_df['任务完成率'] = merged_df[task_columns].mean(axis=1) grade_features = ['章节任务点(5%)', '章节测验(10%)', '作业(40%)', '考试(30%)', '签到(5%)', '课程积分(10%)'] X = merged_df[grade_features] Y = merged_df[['任务完成率']]#特征标准化 grade_scaler = StandardScaler().fit(X) X_scaled = grade_scaler.fit_transform(X) task_scaler = StandardScaler().fit(Y) Y_scaled = task_scaler.transform(Y)# PCA降维 pca = PCA(n_components=1) # 降至1维 X_pca = pca.fit_transform(X_scaled) X_pca = -X_pca # 组合特征(X轴=成绩PCA,Y轴=任务完成度) combined_features = np.hstack((X_pca, Y_scaled)) # KMeans聚类 kmeans = KMeans(n_clusters=3, random_state=42,n_init=10) clusters = kmeans.fit_predict(combined_features) # 分离成绩和任务部分 grade_centers = kmeans.cluster_centers_[:, :1] # 成绩PCA部分 task_centers = kmeans.cluster_centers_[:, 1:] # 任务部分 # 逆变换成绩部分 grade_centers_restored = pca.inverse_transform(grade_centers) # 还原到6维标准化空间 grade_centers_original = grade_scaler.inverse_transform(grade_centers_restored) # 还原到原始成绩 # 逆变换任务部分 task_centers_original = task_scaler.inverse_transform(task_centers) # 合并结果 cluster_centers_original = np.hstack((grade_centers_original, task_centers_original)) # 创建DataFrame feature_names = X.columns.tolist() + ['任务完成率'] cluster_center_df = pd.DataFrame(cluster_centers_original, columns=feature_names) print("各聚类中心实际特征值:") display(cluster_center_df) 章节任务点(5%) 章节测验(10%) 作业(40%) 考试(30%) 签到(5%) 课程积分(10%) 任务完成率 0 3.763759 6.265802 31.862586 16.766125 4.359226 9.327531 0.983806 1 7.465528 12.938833 47.649160 27.198091 5.972354 11.442964 0.163158 2 4.783249 8.103595 36.210304 19.639151 4.803491 9.910134 0.788278 x_data = X_pca.flatten() # 将二维数组转为一维 y_data = merged_df['任务完成率'].values center_x = kmeans.cluster_centers_[:, 0] # 聚类中心在PCA空间的X值 center_y =kmeans.cluster_centers_[:, 1] #center_y = cluster_center_df['任务完成率'].values# 查看第一主成分的权重向量 weights = pca.components_[0] for i, feature in enumerate(grade_features): print(f"{feature}: {weights[i]:.4f}")章节任务点(5%): -0.4678 章节测验(10%): -0.4299 作业(40%): -0.4434 考试(30%): -0.3644 签到(5%): -0.4462 课程积分(10%): -0.2607# 创建画布 plt.figure(figsize=(10, 6)) # 绘制各聚类散点 plt.scatter(x_data[clusters == 0], y_data[clusters == 0], c='purple', alpha=0.7, s=80, label="稳定优秀型") plt.scatter(x_data[clusters == 2], y_data[clusters == 2], c='green', alpha=0.7, s=80, label="潜力提升型") plt.scatter(x_data[clusters ==1], y_data[clusters == 1], c='orange', alpha=0.7, s=80, label="待提升型") plt.xlabel("综合成绩(降维后)", fontsize=12) plt.ylabel("任务完成率", fontsize=12) plt.legend(title="学生类型", loc='upper left', frameon=True, edgecolor='black')老师让我你接下来试一下用sklearn里面的tsne来把聚类的数据投影到二维和三维,我要怎么做,因为我&middot;没有接触过这个,你要说详细一点,解释一下。这里需要在聚类的基础上接着做tsne吗
07-23
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值