mọi người gọi ý giúp em thuật toán tìm họ có điểm trung bình cao nhất với, em cảm ơn ạ
ví dụ: Nguyen Van A 6
Nguyen Van B 7
Tran Van A 8
Tran Van B 1
thì điểm trung bình của họ Nguyễn là (6+7)/2=6.5, còn của họ Tran là (9+1/)2=5
thì mình in ra họ Nguyen có điểm trung bình cao nhất.
Thuật toán tìm họ có điểm trung bình cao nhất
1 Like
struct _DTB
{
char Ho[80];
float sum;
float cnt;
};
_DTB dtb[1000];
for (int j = 0; j < N; j++)
{
// Tach ho khoi ten
p = 0;
while (sv[j].Name[p] != ' ')
{
Ho[p] = sv[j].Name[p];
p++;
}
Ho[p] = '\0';
for (k = 0; k < sz; k++)
{
if (strcmp(Ho, dtb[k].Ho) == 0)
{
// Neu ho giong nhau thi cong vao sum va tang cnt
dtb[k].sum += sv[j].DTB;
dtb[k].cnt++;
break;
}
}
if (k == sz)
{
strcpy(dtb[sz].Ho, Ho); // Ho moi
dtb[sz].sum = sv[j].DTB;
dtb[sz].cnt = 1;
sz++;
}
}
ans = -1.0;
for (int j = 0; j < sz; j++)
{
if (ans < dtb[j].sum / dtb[j].cnt)
{
ans = dtb[j].sum / dtb[j].cnt;
pos = j;
}
}
cout << dtb[pos].Ho << '\t' << fixed << setprecision(1) << round(ans) << endl;
Bạn tạo một mảng struct chứa họ, dtb và số lượng dtb(vì không biết trước có bao nhiêu người có họ đó). Sau đó mỗi lần check mảng sinh viên thì tách họ của người đó rồi xem đã có họ này trong mảng struct chưa.
Nếu có thì sum +=, cnt++
Nếu không thì là họ mới nên bạn khởi tạo sum = điểm sinh viên đó và cnt = 1
6 Likes
cảm ơn bác, em làm được rồi ạ
2 Likes
Làm được là hiểu được hay copy code về chạy được?
3 Likes