前言
1.在字符串中找出连续最长的数字串
请一个在字符串中找出连续最长的数字串,并把这个串的长度返回;如果存在长度相同的连续数字串,返回最后一个连续数字串;
注意:数字串只需要是数字组成的就可以,并不要求顺序,比如数字串“1234”的长度就小于数字串“1359055”,如果没有数字,则返回空字符串(“”)而不是NULL!
思路及小结
遍历输入字符串的每个字符,遇到数字字符,即'0'-'9'之间的字符,记录下数字串的起始地址及长度len_tem,一段数字串结束后将起始地址及长度赋给str及len,将下一次保存的数字串长度tem_len与len相比较,保存长度较长的数字串起始地址及长度。遍历完之后,首先分配数字串大小为(len + 1)的空间,将保存的数字串复制到给空间后,若len为0,则将分配的空间赋为"",最后将该空间的地址赋给输出字符串。
2.对象管理器
题目概述
实现对象管理器功能,其中管理的对象有3个外部关键字,要求实现:
增加对象;
删除对象;
判断对象是否存在;
说明: 对象的三个外部关键字分别以KEY1,KEY2,KEY3表示。
对象的3个外部关键字KEY1,KEY2,KEY3, 其取值范围都为:0~65535;
对象总个数小于等于10000;
以上规格由用例保证。
思路及小结
答案1为容器方式实现,答案2用链表实现。该题实质为对c++中vector的基本操作或者说是c语言中链表的基本操作。当然用vector方式显得更为直观。
3.删除重复字符
题目概述
删除重复字符
给定一个字符串,将字符串中所有和前面重复多余的字符删除,其余字符保留,输出处理后的字符串。需要保证字符出现的先后顺序,并且区分大小写。
思路及小结
用一个bool型的数组表示字符的重复情况,该数组大小为129,使用前先全初始化为false,ascii码最大为127,因此129长度足够了,遍历输入字符串的每一个字符,若对应字符的状态为false,将其加到输出字符串中去,并将字符的bool状态置为true,下一次就不保存该字符了。
4.24点游戏算法
题目概述
给出4个1-10的数字,通过加减乘除,得到数字为24就算胜利
思路及小结
此题为第一个设计到较复杂算法的题,由于是4个操作数,3个运算符,将每一次运算看做一个单元,该单元的结果可能和下一个操作数用下一个运算符构成下一个单元,因此有三个单元,穷举所有可能的运算方式,包括加入括号的情况。具体分析如下:
假如操作数为a,b,c,d,操作符用_代替,其中a,b,c,d的顺序不固定(见实际代码实现过程),_可能取+、-、*、/。加入括号,总共有5种可能的运算方式情形:
1.((a_b)_c)_d
2.a_((b_c)_d)
3.(a_(b_c))_d
4.a_(b_(c_d))
5.((a_b)_(c_d))
根据上面的概念约定,一个单元(即程序中的函数)包括一个运算符及两个操作数,结果为运算结果。将该单元记为函数float oper(int f,float var1,float var2);因此上述5种情况的第一种可表示为:
float result = oper(f3,oper(f2,oper(f1,a,b),c),d);
其中,result为四个操作数运算后的结果,f1,f2,f3分别表示1中第一、二、三个"_"表示的运算符。2、3、4、5情况的表示以此类推。将result的结果和24进行比较,考虑到存在除法的情况,允许一定范围的误差。若result和24接近表示操作数a,b,c,d可构成24点,返回true,结束,在程序的结尾返回false,表示未找到。
以上算法非本人原创,根据一个24点网页小应用改编,点此进入,感兴趣可以参考一下其源码。
5.周期串问题
题目概述
如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以k为周期。例如,abcabcabcabc以3为周期(注意,它也可以6和12为周期,结果取最小周期3)。字符串的长度小于等于100,由调用者保证。
接口说明
原型:
int GetMinPeriod(char *inputstring);
输入参数:
char * inputstring:字符串
返回值:
int 字符串最小周期
思路及小结
先找周期。由于周期必然能被字符串长度整除,因此以1到字符串长度为因子,判断是否能被字符串长度整除,若可以整除,遍历输入字符串,判断是否周期性重复。
6.最后一个单词长度
题目概述
求输入字符串最后一个单词的长度,如hello world,返回5。
输入参数:
字符串,最大长度为128
返回值:
最后一个单词长度
思路及小结
从后往前找空格,然后输出空格之后字符长度。若未找到空格,输出字符串长度。
7.百分制成绩
输入:一个整数0-100以内
输出:一个字符,表示成绩等级
例如:输入:90
输出:A
8.阿姆斯特朗数
接口说明
原型:
int CalcArmstrongNumber(int n);
输入参数:
int n: n ≤ 65536
返回值:
n以内的阿姆斯特朗数的数量
9.查找同构数的数量
详细描述:
接口说明
原型:
intSearchSameConstructNum(int n);
输入参数:
int n:查找1至n之间的全部同构数
返回值:
int:1至n之间同构数的个数
10.二维数组的列排序
实现以下接口:
输入一个m*n 的整数数组,实现按规则排列,返回排列后的数组。
调用者会保证:
比如输入数组为:
1,2,3
2,3,4
2,3,1
1,3,1
按第二列排序:
输出:
1, 2,3
2, 3, 1
1, 3, 1
2, 3, 4