1、1到1亿的数字之和?
方法一:分析:两数相加如果有进位,则两数数字之和大于和的各位数字之和。例如:23+46=69,2+3+4+6=6+9;而97+8=105,9+7+8>1+0+5。所以,要把1——100000000这样分组:(0,99999999),(1,99999998),(2,99999997)(3,99999996)……(49999999,50000000),共50000000组,还剩下数字100000000。这样每一组的数字之和都是:9*8=72总和为:72*50000000+1=3600000001(36亿零1)方法二:1到1亿的自然数,求所有数的拆分后的数字之和,如286 拆分成2、8、6思路:递推方法求解:1.0-9的和为 a1=(0+9)*10/22.0-99时:分析共有100个数,十位上有10对0-9,个位上也是10对0-9(讲个位数上填0补充),此时a2=2*10*(0+9)*10/2;3.0-999时:共有1000个数,百位上有1000对0-9,十位上有10对0-9,个位上也是10对0-9,此时a3=3*100*(0+9)*10/2;依次类推:当位数为n时,有an=n*(10的n-1次方)*(0+9)*10/2;上述题目答案即为(0-99999999)时:a8=8*(10的7次方)*(0+9)*10/2,然后加1就可以了。2、有11个点,每两点之间连一条直线,共有48条线,那么这11个点可以组成几个三角形?3、甲乙丙丁四个人因涉嫌抢劫银行被捕,在闻讯过程中,警察发现其中一个就是罪犯。他们的口供如下:甲:是丙偷得;乙:我没有偷;丙:我也没偷;丁:如果乙没偷,我也没偷。其中只有一个人说的是假话,请你判断出哪一个是罪犯。4、有12个球,外形都一样,其中有一个质量和其他的不一样,给你一架天平,请问最少称几次可以把那个不同的球找出来。5、将“I came from Beijing.”变成“Beijing. From came I”(以单词为单位倒序,单词后面的符号不变)#includeusing namespace std;void reverse_part(char*,int pBegin,int pEnd);void reverse(char *str){ //n为字符串长度 int n=strlen(str)-1; reverse_part(str,0,n); int pBegin=0,pEnd=0; while(str[pEnd+1]){ if(str[pEnd]!=' ' && str[pEnd]!='\0') ++pEnd; //找到空格 else{ reverse_part(str,pBegin,pEnd-1); //如果下一个还是空格 while(str[pEnd+1]!='\0' && str[pEnd+1]==' ') ++pEnd; pBegin=++pEnd; } } cout< <
///// Reverse a string between two pointers// Input: pBegin - the begin pointer in a string// pEnd - the end pointer in a string///void Reverse(char *pBegin, char *pEnd){ if(pBegin == NULL || pEnd == NULL) return; while(pBegin < pEnd) { char temp = *pBegin; *pBegin = *pEnd; *pEnd = temp; pBegin ++, pEnd --; }}///// Reverse the word order in a sentence, but maintain the character// order inside a word// Input: pData - the sentence to be reversed///char* ReverseSentence(char *pData){ if(pData == NULL) return NULL; char *pBegin = pData; char *pEnd = pData; while(*pEnd != '\0') pEnd ++; pEnd--; // Reverse the whole sentence Reverse(pBegin, pEnd); // Reverse every word in the sentence pBegin = pEnd = pData; while(*pBegin != '\0') { if(*pBegin == ' ') { pBegin ++; pEnd ++; continue; } // A word is between with pBegin and pEnd, reverse it else if(*pEnd == ' ' || *pEnd == '\0') { Reverse(pBegin, --pEnd); pBegin = ++pEnd; } else { pEnd ++; } } return pData;}
6、用冒泡法排序。
7、双链表中插入一个节点8、编写一个Allocator,用来代替new,要求效率和稳定性不低于系统new9、要求你写出一个高性能的web-server,说说你的解决方案逻辑题:1. 一块钱一瓶汽水,两个空瓶可以换一瓶汽水,20块钱最多能喝多少瓶汽水。20+20/2=302. 一个三角形的定点各有一只蚂蚁,问三只蚂蚁都不相撞的几率。2/(2*2*2)=1/43. 有一个3升的杯子和一个5升的杯子,如何量出4升的水。2+2