C/C++基础
文章平均质量分 59
王世晖
呵呵哒
展开
-
数组实现大数阶乘
/*********************************************************************************思路:用Data数组来存放阶乘的每一位数字,首先令第一位的数值为1,位数为1,然后将每次相乘的乘积存回数组,并循环处理每个数组中超过10的数,若数值超过10,则需要进位,将位数加1,原来的数除以10,商数加前一位数的数值后存回前一原创 2013-04-21 22:42:49 · 1498 阅读 · 0 评论 -
面试题:计算n!中结尾零的个数
/************************************************************算法思想:在1-10两个数相乘要产生0,只有 10×1=2×5,2×5。200!=200×199×198……×2×1=2×5×2×5×2×199…. ×2×1;可以分解为质数相乘的形式,很明显有2的个数比5的多,所以只要求出200的阶乘可分解出多少个5相乘,就可原创 2013-04-22 11:21:13 · 2349 阅读 · 0 评论 -
华为机试 删除字符串中所有给定的子串
/**********************************************************************************华为机试 删除字符串中所有给定的子串问题描述:在给定字符串中查找所有特定子串并删除,如果没有找到相应子串,则不作任何操作。要求实现函数:int delete_sub_str(const char *str, const c原创 2013-04-22 14:35:51 · 1653 阅读 · 0 评论 -
使用数组实现大整数加法
#include#include#include#include#include#includeusing namespace std;char* add(const char *arr,const char *brr){ //求两个加数的较大值即串较长的 int lena=strlen(arr); int lenb=strlen(brr); int原创 2013-04-22 15:01:57 · 3530 阅读 · 0 评论 -
用堆排序寻找数组中最大的K个数
/***********************************************************************************堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。通常堆是通过一维数组来实现的。在起始数组为 0原创 2013-04-22 15:31:06 · 4114 阅读 · 0 评论 -
不使用任何辅助变量实现strlen(递归实现strlen)
/******************************************************不允许调用库函数,也不允许使用任何全局或局部变量编写 int strlen(char *strDest)******************************************************/#include#include#includeusing na原创 2013-04-23 20:49:16 · 1271 阅读 · 0 评论 -
数组中找两个数使其和等于输入数
/********************************************************************题目:输入一个数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字。如果有多对数字的和等于输入的数字,输出任意一对即可。例如输入数组1、2、4、7、11、15和数字15。由于4+11=15,因此输出4和11。方法:1,分别从数组前,数原创 2013-04-23 20:19:02 · 1687 阅读 · 0 评论 -
快速判断一个数是否是4的次方并求出是4的几次方
/*****************************************************将4的幂次方写成二进制形式后,很容易就会发现有一个特点:二进制中只有一个1(1在奇数位置),并且1后面跟了偶数个0;因此问题可以转化为判断1后面是否跟了偶数个0就可以了。4的整数次幂的二进制数都为 (4)100、(16)10000、(64)1000000......4^1=b 00原创 2013-04-23 21:30:52 · 3179 阅读 · 0 评论 -
华为:统计一串字符串中出现次数最多和次多的单词(华为上机考试题)
//增加难度,并返回最大值和次大值得个数#include#include#include#includeusing namespace std;struct word_frequency{ int max; int sec;};//不要忘记分号int equal(const char * st1,const char * st2){ if (strcmp(s原创 2013-04-16 20:34:51 · 3642 阅读 · 2 评论 -
华为:输入一个字符串,删除重复前面的字符,其余字符按原样顺序输出
/** 输入一个字符串,删除重复前面的字符,其余字符按原样顺序输出.* 例如:* 输入:input: "acbdfdffZZet";* 输出:output:"acbdfZet";* 实现函数:String(String input) *///你理解错题意了,你的做法是只保留出现一次的字符//我想说的是,这道题目有歧义,删除重复前边 的字符,前边只的是什么恶?#include#原创 2013-04-16 20:37:52 · 3009 阅读 · 0 评论 -
华为:请实现手机号码合法性判断的函数
/*我国大陆运营商的手机号码标准格式为:国家码+手机号码,例如:8613912345678。特点如下:1、 长度13位;2、 以86的国家码打头;3、 手机号码的每一位都是数字。请实现手机号码合法性判断的函数(注:考生无需关注手机号码的真实性,也就是说诸如86123123456789这样的手机号码,我们也认为是合法的),要求:1) 如果手机号码合法,返回0;2) 如果手机号码长度不原创 2013-04-16 20:41:32 · 2196 阅读 · 0 评论 -
将一个字符串的元音字母复制到另一个字符串并排序
/*问题描述:有一字符串,里面可能包含英文字母(大写、小写)、数字、特殊字符,现在需要实现一函数,将此字符串中的元音字母挑选出来,存入另一个字符串中,并对字符串中的字母进行从小到大的排序(小写的元音字母在前,大写的元音字母在后,依次有序)。说明:1、 元音字母是a,e,i,o,u,A,E,I,O,U。2、 筛选出来的元音字母,不需要剔重;最终输出的字符串,小写元音字母排在前面,大写原创 2013-04-16 20:51:38 · 2795 阅读 · 0 评论 -
华为:给定一个数组input[],如果数组长度n为奇数,则将数组中最大的元素放到 output[]数组最中间的位置,如果数组长度n为偶数。。
/*给定一个数组input[],如果数组长度n为奇数,则将数组中最大的元素放到 output[]数组最中间的位置,如果数组长度n为偶数,则将数组中最大的元素放到 output[]数组中间两个位置偏右的那个位置上,然后再按从大到小的顺序,依次在第一个位置的两边,按照一左一右的顺序,依次存放剩下的数。 例如:input[] = {3, 6, 1, 9, 7} output[] = {3, 7原创 2013-04-16 20:00:47 · 2839 阅读 · 0 评论 -
华为:现有一串字符串,请对字符串中的数字字符按照升序排序,其他非数字字符存储位置保持不变,将结果保存至output数组中
/*现有一串字符串,请对字符串中的数字字符按照升序排序,其他非数字字符存储位置保持不变,将结果保存至output数组中。【注:字母可能包含大写、小写字母、数字以及控制字符】要求实现函数my_sort(char input[],char output[])例子:input:a3vues4sdf2kjk9df0voutput:a0vues2sdf3kjk4df9v*/#inclu原创 2013-04-16 20:18:58 · 3081 阅读 · 2 评论 -
华为:删除一个字符串指定的字串,并返回字串的个数
/*问题描述: 在给定字符串中查找所有特定子串并删除,如果没有找到相应子串,则不作任何操作。要求实现函数:int delete_sub_str(const char *str, const char *sub_str, char *result_str)【输入】str:输入的被操作字符串sub_str:需要查找并删除的特定子字符串【输出】result_str:在str字符串中删除原创 2013-04-16 20:28:19 · 1637 阅读 · 0 评论 -
华为:查找最大的不重复数
/*查找最大的不重复数l 问题描述如果一个数字十进制表达时,不存在连续两位相同,则称之为“不重复数”。例如, 105 、 1234 和 12121 都是“不重复数”,而 11 、 100 和1225 不是。给定一个正整数 A ,返回大于 A 的最小“不重复数”。A 小于 100000l 要求实现函数unsigned int GetNotRepeatNum(unsigned int原创 2013-04-16 20:40:14 · 2629 阅读 · 1 评论 -
华为:通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串
/*题目描述:通过键盘输入100以内正整数的加、减运算式,请编写一个程序输出运算结果字符串。输入字符串的格式为:“操作数1 运算符 操作数2”,“操作数”与“运算符”之间以一个空格隔开。补充说明:1. 操作数为正整数,不需要考虑计算结果溢出的情况。2. 若输入算式格式错误,输出结果为“0”。要求实现函数:void arithmetic(const char *pInputStr,原创 2013-04-16 20:48:51 · 1946 阅读 · 0 评论 -
华为:尾号限行
/*成都市从2012年4月5日开始对城区的主要干道实行尾号限行。为了帮组市民快速的查询自己的车牌是在哪天限行,特别邀请你写一个程序,输入一系列汽车的车牌号和限行的工作日,输出当天限行的车牌。当前限行规则是,车牌号的最后一位,如果1,6,周一限行;如果是2,7,周二限行;如果是3,8,周三限行;如果是4,9,周四限行;如果是5,0,周五限行;周六和周日对车牌不限行,如果车牌的最后一位不是原创 2013-04-16 20:21:30 · 2289 阅读 · 0 评论 -
华为:干瞪眼
/*干瞪眼问题描述:在成都,流行一种扑克游戏叫“干瞪眼”。使用扑克牌,包括:A(1),2,3,4,5,6,7,8,9,T(10),J(11),Q(12),K(13)。注意:10用T替换,这里暂时不考虑大鬼和小鬼。两手牌的大小规则如下:a) 单牌:4比3大,5比4大,只有两张牌刚好大一点时才能进行比较,比较顺序为:A>K>Q>J>T>9>8>7>6>5>4>3。比如:6大于5,但是不能原创 2013-04-16 20:56:52 · 2275 阅读 · 0 评论 -
华为:身份证号码检测
/* 我国公民的身份证号码特点如下:1、 长度为18位;2、 第1~17位只能为数字;3、 第18位可以是数字或者小写英文字母x。4、 身份证号码的第7~14位表示持有人生日的年、月、日信息。例如:511002 19880808 0111或511002 19880808011x。请实现身份证号码合法性判断的函数。除满足以上要求外,需要对持有人生日的年、月、日信息进行校验。年份大于等原创 2013-04-16 21:00:28 · 1615 阅读 · 0 评论 -
华为:扑克牌比较CompareOneCard
/*扑克牌比较问题描述:在扑克中,牌的类型包括:A(1),2,3,4,5,6,7,8,9,T(10),J(11),Q(12),K(13),D(小鬼devilkin),B(大鬼Belial)。请做一个简单的程序,输入两张牌的字符,比如"2"和"K",判断牌的大小,规则如下:B>D>2>A>K>Q>J>10....>3 最小的为3判断规则:比较cFirstCard和cSecondCard,原创 2013-04-16 21:08:51 · 1387 阅读 · 0 评论 -
华为:IP地址匹配 在路由器中,一般来说转发模块采用最大前缀匹配原则进行目的端口查找,具体如下:
/**************************************************************************************IP地址匹配问题描述:在路由器中,一般来说转发模块采用最大前缀匹配原则进行目的端口查找,具体如下:IP地址和子网地址匹配:IP地址和子网地址所带掩码做AND运算后,得到的值与子网地址相同,则该IP地址与该子网匹配。原创 2013-04-25 16:42:21 · 3476 阅读 · 0 评论 -
华为:编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉
/*题目描述(60分):通过键盘输入一串小写字母(a~z)组成的字符串。请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的字符过滤掉。比如字符串“abacacde”过滤结果为“abcde”。要求实现函数:void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);【输入】 p原创 2013-04-16 18:11:27 · 2724 阅读 · 0 评论 -
华为:操作系统任务调度问题
/*操作系统任务调度问题。操作系统任务分为系统任务和用户任务两种。其中,系统任务的优先级 = 50且 <= 255。优先级大于255的为非法任务,应予以剔除。现有一任务队列task[],长度为n,task中的元素值表示任务的优先级,数值越小,优先级越高。函数scheduler实现如下功能,将task[] 中的任务按照系统任务、用户任务依次存放到 system_task[] 数组和 us原创 2013-04-16 20:16:46 · 1551 阅读 · 2 评论 -
华为: 识别字符串中的整数并转换为数字形式
/*识别字符串中的整数并转换为数字形式 void take_num(const char *strIn, int *n, unsigned int *outArray) 【输入】 strIn: 输入的字符串 【输出】 n: 统计识别出来的整数个数 outArray:识别出来的整数值,其中outArray[0]是输入字符串中从左到右第一个整数, outArray[1]是第二个整数,以此类原创 2013-04-16 20:24:07 · 2257 阅读 · 0 评论 -
华为:对一个数组,将数组中偶数从大到小排序,奇数从小到大排序,奇数和偶数交叉着放,且输出数组第一位放奇数
/*对一个数组,将数组中偶数从大到小排序,奇数从小到大排序,奇数和偶数交叉着放,且输出数组第一位放奇数 若奇数和偶数不等长,则把剩下的直接放到数组中。 */#include #include #include int comp(const void *p, const void *q) { return (*(int *)p - *(int *)q); } void原创 2013-04-16 21:06:45 · 5261 阅读 · 0 评论 -
求一个字符串中的最大长度的数字
#include#include#include#includeusing namespace std;int GetMaxLenNumber(char *inputStr,int len){ //开始处理的位置 int startPos = 0; //当前处理的字符长度 int tempCharCount = 0; //数字的最长长度原创 2013-04-16 21:13:43 · 1446 阅读 · 0 评论 -
字符串调整为RGB的顺序
/*题目:一个字符串只有‘R’、‘G’、‘B’组成,如何让所有的‘R’出现在前面,所有的‘G’在中间,所有的‘B’在最后。要求:要求空间复杂度为O(1),只许遍历一遍字符串数组思路:维护三个游标 i、j、ki 指向开始, j 指向尾部,用于分别插入 R 、Bk 用于遍历,当发现是R时,与前面的 i 指的对象交换,i 后移;当发现是B时,与后面的 j指的对象交换,j前移当 k与j相遇原创 2013-04-17 13:02:07 · 1083 阅读 · 0 评论 -
在字符串中找出连续最长的数字串
/*写一个函数,它的原形是int continumax(char *outputstr,char *intputstr)功能:在字符串中找出连续最长的数字串,并把这个串的长度返回,并把这个最长数字串付给其中一个函数参数outputstr所指内存。例如:"abcd12345ed125ss123456789"的首地址传给intputstr后,函数将返回9,outputstr所指的值为123原创 2013-04-17 13:03:59 · 1079 阅读 · 0 评论 -
华为:编程实现联想输入法 输入联想功能是非常实用的一个功能,请编程实现类似功能
/****************************************************************************输入联想问题描述:输入联想功能是非常实用的一个功能,请编程实现类似功能。要求实现函数: void auto_complete(char *str, char *tmp,char *output) 【输入】 char *str,候原创 2013-04-25 17:19:59 · 7143 阅读 · 0 评论 -
编程实现求幂函数double power(double base,int ex) 递归实现
#includeusing namespace std;const double precision=0.0000001;bool invalidinput=false;//判断两浮点数数是否相等的方法,不能直接用等号bool equal(double num1,double num2){ if((num1-num2<precision)||(num2-num1<precisi原创 2013-04-25 22:14:17 · 2572 阅读 · 0 评论 -
找出01字符串中0和1连续出现的最大次数
//找出01字符串中0和1连续出现的最大次数#include void Count(char *str, int *max0, int *max1){ int temp0 = 0; int temp1 = 0; while (*str++) { if (*str == '0') { temp0++;原创 2013-04-17 17:56:41 · 3162 阅读 · 2 评论 -
找出出现次数最多的单词并输出,并输出出现的次数
/**************************************************************************************************************给你一堆英文单词,找出出现次数最多的,输出这个单词,并输出出现的次数。思路:hash离散数据,进行查询即可。(转化为数字时)1.首先将每个字符串转化为一个数字。2.把离原创 2013-04-17 17:59:51 · 4260 阅读 · 0 评论 -
找出数组中只出现一次的2个数
/*************************************************************************************************************************题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。异或原创 2013-04-17 23:46:44 · 1117 阅读 · 0 评论 -
华为:将两个数从字符串转为数,将这两个数做乘积后再转化为字符串保存起来
/***********************************************************************求两个字符串的乘积,结果存到字符串中,例如字符串一中存的“657891”,字符串二中存的“521”,分别将字符串中的字符转换成整型数字,进行计算后,再转换成字符类型存储起来**************************************原创 2013-04-18 12:35:45 · 1410 阅读 · 0 评论 -
统计字符串中第一个出现次数为1的字符
#include#include#includeusing namespace std;/*-----------------------------------------------------------------------#define N 256int charHash[N] = {0};void initCharHash(const char *s){ wh原创 2013-04-18 12:41:03 · 939 阅读 · 0 评论 -
华为校招上机一道----字符串分离
/**************************************************************题目描述:通过键盘输入任意一个字符串序列,字符串可能包含多个子串,子串以空格分割。请编写一个程序,自动分离出各个子串,并使用','将其分离,并且在最后也补充一个',',并将子串存储。要求实现函数:void DivideString (const char *pI原创 2013-04-18 12:45:55 · 1183 阅读 · 0 评论 -
华为:现有一串字符串,请找出其中的大写字母并顺序保存至output数组中
/*现有一串字符串,请找出其中的大写字母并顺序保存至output数组中。【注:字母可能包含大写、小写字母、数字以及控制字符】要求实现函数my_string(char input[],char output[])例子:input:3dfD93dafkIFIkdLDkjLKDoutput:DIFILDLKD*/#include#includeusing namespace std;原创 2013-04-16 20:13:15 · 1418 阅读 · 0 评论 -
字符串移动:字符串为*号和26个字母的任意组合把*号都移动到最左侧,把字母移到最右侧并保持相对顺序不变
/***********************************************************************************字符串移动(字符串为*号和26个字母的任意组合,把*号都移动到最左侧,把字母移到最右侧并保持相对顺序不变),要求时间和空间复杂度最小如果没有要求保证字母相对顺序不变的话,那么这题用2个双端指针,往中间移动交换元素是最简单的原创 2013-04-18 12:58:02 · 2144 阅读 · 0 评论 -
确定一个整数的2进制中有几个bit"1"写法
/******************************************************************************************************确定一个整数的2进制中有几个bit"1"写法注意不断右移判断最低位是1有多少个的算法是错误的,因为根据GNU C/C++的实现来看,负数是带符号填充进行右移的,所以如果是负数,该算法会死循原创 2013-04-18 13:02:32 · 2128 阅读 · 0 评论