电视大赛观众投票及排名系统的设计与实现( 8学时)\n问题描述:在很多的电视大赛中,通常当选手表演结束后,现场观众通过手中的按键对参赛选手进行投票,然后对选手获得的票数进行统计,从高到低进行降序排序,从而自动产生冠军、亚军和季军。要求编写算法模拟实现上述系统的功能。\n1.基本要求\n(1)首先输入参赛选手的人数(范围为1-9个),然后根据人数通过malloc函数来分配存放选手信息的顺序表;\n(2)将选手的编号和姓名依此存入顺序表中;\n(3)观众通过按键进行投票,按’1’为1号选手投票,按’2’为2号选手投票,以此类推,以按’0’作为投票结束标志;\n(4)投票结束后进行排序,在此采用各种排序算法,然后为每个选手计算名次,得票相同的名次也相同;。C++语言
时间: 2023-06-14 11:05:10 浏览: 365
以下是一个可能的算法模拟实现,使用了选择排序算法进行排序,你可以根据需要进行修改和优化:
```c++
#include <iostream>
#include <cstdlib>
using namespace std;
typedef struct {
int id; // 选手编号
char name[20]; // 选手姓名
int votes; // 票数
int rank; // 名次
} Player;
int main() {
int n; // 参赛选手人数
cout << "请输入参赛选手人数(1-9): ";
cin >> n;
Player* players = (Player*) malloc(n * sizeof(Player)); // 分配存放选手信息的顺序表
for (int i = 0; i < n; i++) {
cout << "请输入第" << i + 1 << "个选手的编号和姓名(用空格分隔): ";
cin >> players[i].id >> players[i].name;
players[i].votes = 0; // 初始化票数为0
players[i].rank = 0; // 初始化名次为0
}
cout << "请观众开始投票,按'1'-'9'为相应选手投票,按'0'结束投票: " << endl;
int vote;
while (cin >> vote && vote != 0) {
if (vote < 1 || vote > n) {
cout << "无效的选手编号,请重新投票: " << endl;
continue;
}
players[vote - 1].votes++; // 统计票数
}
// 采用选择排序算法对选手按票数排序
for (int i = 0; i < n - 1; i++) {
int max_idx = i;
for (int j = i + 1; j < n; j++) {
if (players[j].votes > players[max_idx].votes) {
max_idx = j;
}
}
if (max_idx != i) {
swap(players[i], players[max_idx]);
}
}
// 计算名次
int rank = 1;
players[0].rank = 1;
for (int i = 1; i < n; i++) {
if (players[i].votes == players[i - 1].votes) {
players[i].rank = rank;
} else {
players[i].rank = ++rank;
}
}
// 输出结果
cout << "选手排名结果:" << endl;
for (int i = 0; i < n; i++) {
cout << "第" << players[i].rank << "名: " << players[i].id << " " << players[i].name << " " << players[i].votes << "票" << endl;
}
free(players); // 释放内存
return 0;
}
```
注意,以上代码仅供参考,可能还有其他的实现方式。
阅读全文