Untitled
🧩 Syntax:
/*
Cho danh sách thông tin của n sinh viên gồm (mã sinh viên, tên lớp, điểm). Hãy viết chương trình thống kê điểm cao nhất, điểm thấp nhất và điểm trung bình theo từng lớp.
Đầu vào:
+ Dòng đầu chứa số n
+ n dòng sau mỗi dòng gồm mã sinh viên, tên lớp, điểm cách nhau bởi một dấu phẩy
Ràng buộc:
+ 0 < n ≤ 100
+ Mã sinh viên là một xâu gồm 5 kí tự
+ Tên lớp là một xâu có tối đa 10 kí tự
+ Điểm là một số thực trong đoạn [0, 10]
Đầu ra:
Mỗi dòng chứa tên lớp, điểm cao nhất, điểm thấp nhất và điểm trung bình cách nhau bởi một dấu chấm phẩy. Kết quả được tính với độ chính xác hai chữ số sau dấu phẩy.
Các lớp được sắp xếp theo thứ tự giảm dần theo điểm trung bình, nếu hai lớp có điểm trung bình bằng nhau thì sắp xếp theo tên lớp tăng dần theo bảng chữ cái (abc).
Ví dụ:
Input Output
6 CNT45;7.00;5.00;6.00
SV01,CNT45,5 KPM 55;8.00;4.00;6.00
SV 02,KPM 55,4 TTM55;8.10;2.10;5.10
SV03,CNT45,7
SV04,TTM55,8.1
SV 05,KPM 55,8
SV06,TTM55,2.1
*/
#include <stdio.h>
#include <string.h>
typedef struct Lop
{
char ten_lop[11];
double diem_ln, diem_nn, diem_tb;
unsigned int sosv;
} Lop;
int main()
{
int n, m, i, j;
char ten_lop[11];
double diem;
Lop lop[100], tmp;
scanf("%d", &n);
for(m = 0, i = 0; i < n; i++)
{
scanf("%*c%*[^,],%[^,],%lf", ten_lop, &diem);
for(j = 0; j < m; j++)
if(!strcmp(lop[j].ten_lop, ten_lop))
{
lop[j].diem_tb += diem;
lop[j].sosv++;
if(lop[j].diem_ln < diem)
lop[j].diem_ln = diem;
if(lop[j].diem_nn > diem)
lop[j].diem_nn = diem;
break;
}
if(j == m)
{
strcpy(lop[m].ten_lop, ten_lop);
lop[m].sosv = 1;
lop[m].diem_ln = diem;
lop[m].diem_nn = diem;
lop[m++].diem_tb = diem;
}
}
for(i = 0; i < m; i++)
lop[i].diem_tb /= lop[i].sosv;
for(i = 0; i < n-1; i++)
for(j = i+1; j < n; j++)
if(lop[i].diem_tb < lop[j].diem_tb || (lop[i].diem_tb == lop[j].diem_tb && strcmp(lop[i].ten_lop, lop[j].ten_lop) > 0))
{
tmp = lop[i];
lop[i] = lop[j];
lop[j] = tmp;
}
for(i = 0; i < m; i++)
printf("%s;%.2lf;%.2lf;%.2lf\n", lop[i].ten_lop, lop[i].diem_ln, lop[i].diem_nn, lop[i].diem_tb);
return 0;
}