13-B. 谁的票数最高(函数模板)

本文介绍了一个通用的投票系统实现方案,该系统使用C++模板技术,能够处理不同类型的候选人识别码,如整数、字符和字符串等,从而选出得票最多的候选人。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验13-函数模版与类模版-
题目描述
某小镇要票选镇长,得票最高者当选。但由于投票机制不健全,导致每届投票时,候选人在投票系统的识别码类型不一致。请编写函数模板,能针对多种类型的数据,查找出得票最高的元素。其中,每届投票的选票有n张,识别码类型为T

注意:必须使用模板函数

输入
第一行输入t表示有t个测试实例

第二行先输入一个大写字母表示识别码类型,I表示整数类型,C表示字符型,S表示字符串型;然后输入n表示数组长度。

第三行输入n个数据

依次输入t个实例

输出
每行输出一个结果,分别输出当选者的识别码和得票数,以空格分开。

输入样例
3
I 10
5 3 5 2 9 7 3 7 2 3
C 8
a b a e b e e q
S 5
sandy david eason cindy cindy

输出样例
3 3
e 3
cindy 2

#include<iostream>
 using namespace std;

 template<class Type>
 class list
 {
     Type *a;
     int len;//长度
     int max;
     Type Max;
 public:
     list(){}
     list(int l,Type *t)
     {
         int i,j;
         len=l;
         a=new Type[len];
         int *sum=new int[len];
         
         for(i=0;i<len;i++)
         {
             a[i]=t[i];
             sum[i]=0;
         }
         for(i=0;i<len;i++)
             for(j=0;j<len;j++)
                 if(a[i]==t[j])
                     sum[i]++;
         
         max=-1;
         Max=a[0];
         for(i=0;i<len;i++)
         {
             if(sum[i]>max)
             {
                 max=sum[i];
                 Max=a[i];
             }
         }
         delete []sum;
     }
     void print()
     {
         cout<<Max<<" "<<max<<endl;
     }
     ~list()//不析构不给分
     {
         delete []a;
     }
 };

 int main()
 {
     int t,n,i;
     string type;
     cin>>t;
     while(t--)
     {
         cin>>type>>n;
         if(type=="I")//int
         {
             int *a=new int[n];
             for(i=0;i<n;i++)
                 cin>>a[i];
             list<int> L(n,a);
             L.print();
             delete []a;
         }
         else if(type=="C")//char
         {
             char *a=new char[n];
             for(i=0;i<n;i++)
                 cin>>a[i];
             list<char> L(n,a);
             L.print();
             delete []a;
         }
         else if(type=="S")//string
         {
             string *a=new string[n];
             for(i=0;i<n;i++)
                 cin>>a[i];
             list<string> L(n,a);
             L.print();
             delete []a;
         }
     }
     return 0;
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值