A. 找到最大数(函数模板)
利用函数模板求不同类型的5个数最大值(分别考虑整数、单精度、长整数的情况)
输入
分别输入5个int型整数、5个float 型实数、5个long型正整数。
输出
分别输出5个int型整数的最大值、5个float 型实数的最大值、5个long型正整数的最大值。
输入样例1
11 22 666 44 55
11.11 22.22 33.33 888.88 55.55
1234567 222222 333333 444444 555555
输出样例1666
888.88
1234567#include <iostream> using namespace std; template<typename T> T max(T a[], int t) //注意 返回值为T { T num = 0; for (int i = 0; i < t; i++) { if (num < a[i]) { num = a[i]; } } return num; } int main() { int i[5]; float f[5]; long l[5]; for (int j = 0; j < 5; j++) { cin >> i[j]; } for (int j = 0; j < 5; j++) { cin >> f[j]; } for (int j = 0; j < 5; j++) { cin >> l[j]; } cout << max<int>(i,5) << endl;// 先<显式指定类型> 然后再(函数参数) cout << max<float>(f,5) << endl; cout << max<long>(l,5) << endl; }
B. 元素查找(函数模板)
编写一个在数组中进行查找的函数模板,其中数组为具有n个元素,类型为T,要查找的元素为key。
注意:必须使用模板函数
输入
第一行输入t表示有t个测试实例
第二行先输入一个大写字母表示数组类型,I表示整数类型,D表示双精度数类型,C表示字符型,S表示字符串型;然后输入n表示数组长度。
第三行输入n个数据
第四行输入key
依次输入t个实例
输出
每行输出一个结果,找到输出key是数组中的第几个元素(从1开始),找不到输出0
输入样例1
4
I 5
5 3 51 27 9
27
D 3
-11.3 25.42 13.2
2.7
C 6
a b g e u q
a
S 4
sandy david eason cindy
cindy
输出样例14
0
1
4#include <iostream> #include<cstring> using namespace std; template<typename T> int tar(T a[], int n) //返回int 因为target是个整数 { for (int i = 0; i < n; i++) { cin >> a[i]; } T key; cin >> key; int target = 0; for (int i = 0; i < n; i++) { if (a[i] == key) { target = i + 1; } } return target; } int main() { int t, n; cin >> t; char type; while (t--) { cin >> type >> n; switch (type) { case'I': { int* p = new int[n]; cout << tar(p, n) << endl; break; } case'D': { double* p = new double[n]; cout << tar(p, n) << endl; break; } case'C': { char* p = new char[n]; cout << tar(p, n) << endl; break; } case'S': { string* p = new string[n]; cout << tar(p, n) << endl; break; } } } return 0; }
C. 谁的票数最高(函数模板)
某小镇要票选镇长,得票最高者当选。但由于投票机制不健全,导致每届投票时,候选人在投票系统的识别码类型不一致。请编写函数模板,能针对多种类型的数据,查找出得票最高的元素。其中,每届投票的选票有n张,识别码类型为T
注意:必须使用模板函数
第一行输入t表示有t个测试实例
第二行先输入一个大写字母表示识别码类型,I表示整数类型,C表示字符型,S表示字符串型;然后输入n表示数组长度。
第三行输入n个数据
依次输入t个实例
输出
每行输出一个结果,分别输出当选者的识别码和得票数,以空格分开。
输入样例1
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
输出样例13 3
e 3
cindy 2#include <iostream> #include<cstring> using namespace std; template <class T> void check(int n) { T *a = new T[n]; for (int i = 0; i < n; i++) { cin >> a[i]; //输入n个数据 } int max = 0; //当选者得票数 index = 0;//当选者识别码 for (int i = 0; i < n; i++) { int count = 0; for (int j = 0; j < n; j++) { if (a[i] == a[j])//如果有一样的就+票 { count++; } } if (count > max) { max = count; index = i; } } cout << a[index] << ' ' << max << endl; } int main() { int t; cin >> t; while (t--) { char x; cin >> x; int num; cin >> num; if (x == 'I') check<int>(num); if (x == 'C') check<char>(num); if (x == 'S') check<string>(num); return 0; }