华为机试第三篇
来源:互联网 发布:数据分析表 编辑:程序博客网 时间:2024/05/17 01:12
http://www.cnblogs.com/WJPeng/archive/2012/11/02/2750716.html
一:给定一个字符串,寻找它的一个最大子字符串,该子字符串是回文。例如给定一个用例的字符串”gabcdcbaef”,那么最大回文
字串是”abcdcba”
函数声明为void huiwen(char input[], int len, char output[])
//如果是回文字符串,那么从字符串的最中间向两头分别遍历,则应该都是相等的void huiwen(char input[],int len, char output[]){ //start表示回文字串的起始位置 int max=0,left=0,start=0; for(int i=0;i<len;i++) { for(int t=0;t<=i;++t) { if(i+t>len)//避免发生了越界访问 break; if(input[i-t]!=input[i+t])//从中间向两边遍历 break; else ++left; } //总回文数=2*(left-1)+1 if(2*(left-1)+1>max) { max=2*left-1; start=i-left+1;//获取其起始地址 } left=0; } memcpy(output,input+start,max);}
二:删除字符串中所有给定的子串
问题描述: 在给定字符串中查找所有特定子串并删除,若是没有找到响应子串,则不作任何操作。要求实现函数:
int delete_sub_str(const char *str, const char *sub_str, char *result_str)
输入: str:输入的被操作字符串
sub_str:需要查找并删除的特定子字符串
输出: result_str:在str字符串中删除所有sub_str子字符串后的终局
返回: 删除的子字符串的个数
子串匹配只考虑最左匹配情况,即只需要从左到右进行字串匹配的情况。比如:在字符串"abababab"中,采用最左匹配子串"aba",
可以匹配2个"aba"字串。若是匹配出从左到右位置2起头的"aba",则不是最左匹配,且只能匹配出1个"aba"字串。输入字符串不会
跨越100 Bytes,请不用考虑超长字符串的情况。
示例
输入:str = "abcde123abcd123"
sub_str = "123"
输出:result_str = "abcdeabcd"
返回:2
输入:str = "abcde123abcd123"
sub_str = "1234"
输出:result_str = "abcde123abcd123"
返回:0
int delete_sub_str(const char *str, const char *sub_str, char *result_str){ int len=strlen(sub_str);//获取子串的长度 int cnt=0,index=0; for(int t=0;t<strlen(str);++t) { for(int j=0;j<len;j++) if(str[t+j]!=sub_str[j]) break; if(j>=len) { ++cnt; t=t+len-1;//删除子串 } else result_str[index++]=str[t]; } result_str[index]='\0'; return cnt;}
三:在计算机中,由于位宽限制,只能进行有限精度的十进制整数加减法,比如在32位宽计算机中,参与运算的操作数和结果必须
在-231~231-1之间。若是需要进行更大规模的十进制整数加法,需要使用特殊的方法实现,比如使用字符串保存操作数和结果,采
纳逐位运算的方式进行。如下:9876543210 + 1234567890 = ?,让字符串 num1="9876543210",字符串 num2="1234567890",结果
保存在字符串 result = "11111111100"。-9876543210 + (-1234567890) = ?让字符串 num1="-9876543210",字符串 num2="-
1234567890",终局保存在字符串 result = "-11111111100"。
要求编程实现上述高精度的十进制加法。
要求实现函数:
void add (const char *num1, const char *num2, char *result)
输入:num1:字符串形式操作数1,若是操作数为负,则num1[0]为符号位-
num2:字符串形式操作数2,若是操作数为负,则num2[0]为符号位-
输出:result:保存加法计较终局字符串,若是终局为负,则result[0]为符号位。
当输入为正数时,+不会出今朝输入字符串中;当输入为负数时,-会出今朝输入字符串中,且必然在输入字符串最左边位置
输入字符串所有位均代表有效数字,即不存在由0起头的输入字符串,比如"0012", "-0012"不会呈现;
要求输出字符串所有位均为有效数字,终局为正或0时+不出今朝输出字符串,终局为负时输出字符串最左边位置为-。
//只考虑同号的情况下,不同号情况类似【程序有点冗长,共同改进】void add (const char *num1, const char *num2, char *result){ int len1=strlen(num1),len2=strlen(num2),flag=0; if((num1[0]=='-'&&num2[0]!='-')||(num1[0]!='-'&&num2[0]=='-1'))//同为正数 return ; const char *p1=num1+strlen(num1)-1,*p2=num2+strlen(num2)-1; if(num1[0]=='-'&&num2[0]=='-') { num1++; num2++; p1=num1+strlen(num1)-1; p2=num2+strlen(num2)-1; } int max=_cpp_max(len1,len2); int index=0,carry=0; for(int i=0;i<max;i++) { if(p1>=num1&&p2>=num2) { int tmp=*p1-48+*p2-48+carry; if(tmp>=10) { result[index++]=tmp-10+48; carry=1; } else { result[index++]=tmp+48; carry=0; } p1--; p2--; } else if(p1>=num1&&p2<num2) { int tmp=*p1-48+carry; if(tmp>=10) { result[index++]=tmp-10+48; carry=1; } else { result[index++]=tmp+48; carry=0; } p1--; } else if(p1<num1&&p2>=num2) { int tmp=*p2-48+carry; if(tmp>=10) { result[index++]=tmp-10+48; carry=1; } else { result[index++]=tmp+48; carry=0; } p2--; } } if(*(num1-1)=='-'&&*(num2-1)=='-') result[index++]='-'; result[index]='\0'; int left=strlen(result)/2; if(strlen(result)%2==0) { left=left-1; result[left]=result[left]^result[left+1]; result[left+1]=result[left]^result[left+1]; result[left]=result[left]^result[left+1]; } for(int l=0;l<left;l++) { int tmp=result[l]; result[l]=result[strlen(result)-l-1]; result[strlen(result)-l-1]=tmp; }}
详细代码以及测试以上传,点这里下载
- 华为机试第三篇
- 2014华为招聘机试第三题
- 华为2012机试第三题
- 华为机试题第三题
- 华为2016校园招聘机试第三题
- 华为实习生机试2017.03第三题
- 华为机试第二篇
- 2012华为机试第三题引发的关于“java传值,传引用”思考
- 华为机试在线训练–牛客网(python)第三部分
- 华为2016年机试题 第三题详解
- 华为机试
- 华为机试
- 华为机试
- 华为机试
- 华为机试4
- 华为机试
- 华为机试
- 华为机试-2014
- gcc: multiple definition of
- 心跳包
- 非递归周游二叉树
- 使用Flex states时不用字符串
- JVM内存机制
- 华为机试第三篇
- 好诗啊
- 第十周-求1000以内所有偶数的和(for语句)
- 是时间变了、还是自己变了:安尛思搜集发布的伤感日志
- 移植MyBB到SAE平台(二)
- Android: /cache中的文件是怎么消失的[转]
- Ubuntu下配置tftp服务和NFS服务
- 希儿的非主流伤感qq日志:别问我为什么想你
- 【CSDN常见问题解答】Java单例模式分析