01:编程填空:字符串排序
描述
请按照要求对输入的字符串进行排序。
|
|
输入
第一行是正整数T,表示测试数据的组数
每组测试数据输入共两行,
第一行是正整数N,表示字符串个数
第二行是N个字符串, 字符串间用空格分离
输出
对于每组测试数据,先输出一行:
Case: n
如对第一组数据就输出Case: 1
第二行按照字符串长度从小到大排序之后输出N个字符串,字符串之间以空格间隔(不会出现字符串长度相同的情况)
第三行按照字符串首字符ASCII码序从小到大排序之后输出N个字符串,字符串之间以空格间隔(不会出现字符串首字母相同的情况)
样例输入
|
|
样例输出
|
|
Solution
这里我们可以看到,题目中给了我们get_name和get_size两个函数,那就把它用起来吧
同时从友元看出,需要我们重载<这个运算符
同时,需要写出一个MyLarge的模板类
然后,还需要写出show和print两个函数
最大意的地方在于之前忘记模板类的对象可以通过重载()运算符来仿函数,所以卡了一会
下面看代码:
|
|
02:按距离排序
描述
程序填空,输出指定结果
|
|
输入
多组数据,每组一行,是一个整数n和一个字符串s
输出
定义两个整数的距离为两个整数差的绝对值
定义两个字符串的距离为两个字符串长度差的绝对值
对每组数据:
对数组a按和n的距离从小到大排序后输出。距离相同的,值小的排在前面。
然后对数组b,按照和s的距离从小到大输出。距离相同的,字典序小的排在前面
样例输入
|
|
样例输出
|
|
Solution
我们确实大意了,函数可以作为模板类的一个对象,如果知道了就好说了,直接重载()即可
下面看代码:
|
|
03:回调函数
描述
输入x1 x2 x3 x4 x5 ,输出y = x5^5 + x4^4 + x3^3 + x2^2 + x1^1 + 1的y的值
|
|
输入
多组数据。第一行是数据组数 n
每组数据为一行,5个整数,x1 x2 x3 x4 x5。数值不大,不必考虑溢出
输出
对每组数据,输出一个整数y, y = x5^5 + x4^4 + x3^3 + x2^2 + x1^1 + 1
样例输入
|
|
样例输出
|
|
Solution
这道题就是要求我们重载出一个仿函数,然后这个仿函数作为一个类对象被加入vector中然后狗作用于m,所以,我们只需要重载一个()即可
下面看代码:
|
|
04:编程填空:Printer
描述
完成以下程序,使得输入的整数x,以及若干正整数,将大于x的正整数输出;
然后输入若干字符串,将字符串长度大于x的字符串输出
|
|
输入
第一行是整数t,表示一共t组数据
每组数据有三行
第一行是整数x和整数 n
第二行是n个整数
第三行是n个不带空格的字符串
输出
对每组数据
先按原序输出第一行中大于x的正整数(数据保证会有输出)
再按原序输出第二行中长度大于x的字符串 (数据保证会有输出)
样例输入
|
|
样例输出
|
|
Solution
本题没有为我们准备模板类
而且对于string和int两个类的判断函数是不一样的
所以,我们需要重载两次
|
|
05:矩阵排序
描述
创建矩阵类,要求能够输入整数类型的m*n矩阵,并按照元素个数,矩阵中元素之和,创建矩阵顺序对矩阵类分别排序
|
|
输入
前两行是一个22矩阵
之后三行是一个34矩阵
最后两行是一个2*2矩阵
输出
先按照元素个数从小到大输出三个矩阵(大小相同时后创建的矩阵先输出)
再按照元素之和从小到大输出三个矩阵(大小相同时后创建的矩阵先输出)
再按照矩阵创建顺序从先到后输出三个矩阵
(矩阵排列方式与输入相同,每个元素后用一个空格进行分隔)
样例输入
|
|
样例输出
|
|
Solution
其实是简单的矩阵题,然后重载输入输出和一个判断函数和一个模板判断函数,最后,输入顺序我们用一个静态成员变量表示,就可以了
|
|
06:编程填空:数组输出
描述
填写代码,创建Print模板类,要求对输入的字符串数组或整数数组,用模板类进行输出并自动换行
|
|
输入
有多个输入样例
每个样例的第一行为两个整数m,n(m,n不超过20)
每个样例的第二行为m个字符串
每个样例的第三行为n个整数
输出
对每个样例输出两行
第一行为输入的字符串(去除空格)
第二行为输入的整数(去除空格)
样例输入
|
|
样例输出
|
|
Solution
这里我们介绍一个新知识点,叫做链式加法
这是什么?
就是说,我们对于一个加法,返回的是原来的仿函数模板类对象
这样就完了
而且题目给了我们输出次数,完全可以做出链式的断裂条件
|
|
07:编程填空:正向与反向输出
描述
输入一个的序列,首先输出原序列,每个元素之间以"—“分开
再将序列的每个元素翻倍,并逆序输出原序列,每个元素之间以”***“分开。
|
|
输入
第一行是测试数据组数k。
对于每组测试数据,先输入
测试数据共有k组,每组首先输入序列长度n,接下来n个整数分别代表序列的n个数。
输出
对于每组测试数据输出两行,分别是以”—“分割的原序列,和以”***“分割的翻倍后的逆序序列。
样例输入
|
|
样例输出
|
|
Solution
仔细阅读ppt中关于copy的定义即可轻松得出答案~
|
|
08:找第一个最小的
描述
写出 FindFirstLess 模板,用于寻找序列中小于某指定值的第一个元素
|
|
输入
第一行是测试数据组数T
接下来有2T行,每两行是一组测试数据
每组数据第一行开始是一个整数,表示这组数据有n项;接下来是一个字母,如果是’N’,表示这组数据都是整数,如果是’S’表示这组数据都是字符串
第二行就是n个整数,或者n个字符串
输出
对每组数据,输出第二行的前n-1项里面,第一个小于第n项的 。如果找不到,输出 “Not Found”
样例输入
|
|
样例输出
|
|
Solution
其实这道题就是普通的函数模板
我们可以看到less返回了一个实例化的函数模板类
那么,我们直接写一个函数就可以了
|
|
09:输出Fibonacci数列
描述
Fibonacci数列指的是数列第一项和第二项为1,之后每一项是之前两项的和所构成的数列。 现有多组数据,每组数据给出一个数字n,请你输出Fibonacci数列的前n-1项。
|
|
输入
每组数据一行,整数n 输入以0结尾
输出
对每组数据输出前 n-1项
样例输入
|
|
样例输出
|
|
Solution
这道题我其实看不大懂,然后查了一下发现每个类里需要存一下现在的值和上一个函数的值,重载++和!=的时候跟已经得到的值进行比较,然后*就是重载成输出,就可以了
-
笔者注:学了python的面向对象编程和生成器后更有感觉了
|
|
10:改良过的CArray3d三维数组模板类
描述
程序填空,按要求输出
|
|
输入
无
输出
如样例
样例输入
|
|
样例输出
|
|
Solution
说是改良了,其实没有
用上次的代码完全能过,不解释
|
|