题目来源:【深基9.例1】选举学生会 - 洛谷
解题思路:
设置一个和候选者人数n等大的投票箱,所有的投票人m依次排队投票给候选者,这样每个投票箱都是该候选者的票数,再依次把箱子里的票输出即可。注:这种计数排序的思想比较适合排序数字不大的情况,因为这种方法的时间复杂度为O(n+m),与人数有关,太大时间复杂度过高,得不偿失。
代码实现:
#include<iostream>
using namespace std;
int a[1010] = { 0 }, n, m, temp; // 声明全局变量,a数组用于存储每个候选人的票数,n为候选人数,m为投票数,temp用于临时存储投票信息
int main() // 主函数入口
{
cin >> n >> m; // 输入候选人数n和选票数m
for (int i = 0; i < m; i++) // 循环m次,对每张选票进行处理
{
cin >> temp; // 输入当前选票所投的候选人编号
a[temp]++; // 将对应候选人的票数加1
}
for (int i = 1; i <= n; i++) // 遍历每个候选人
{
for (int j = 0; j < a[i]; j++) // 根据候选人获得的票数,循环输出候选人的编号
{
cout << i << ' '; // 输出候选人编号
}
}
cout << endl; // 打印换行,结束输出
return 0; // 程序正常结束
}