计算机算法
文章平均质量分 93
简单离散数学类算法,非统计学、微分方程算法
六个九十度
嵌入式软件工程师
展开
-
【转贴+排版】测度论简介——一个通往异世界的大门
加法不能定义在不可数无穷集合上转载 2023-03-08 10:56:18 · 1006 阅读 · 1 评论 -
Dota英雄卡尔有多少个技能?
在百度贴吧Dota吧看到一道算法题,假设卡尔能召唤k种元素,并且身上同时能挂m个元素,则卡尔最多能搓出多少个技能? 题目特意指出,卡尔搓出什么技能仅取决于身上挂着的各种元素数目的比值,而与元素的排列顺序无关。 解这个题花了我一天的时间,惭愧,因为我是基于我昨天的思路开展的,而昨天的思路是错的。重新对题目进行形式化描述后,问题很快解决。 不过两种思路的基础是一样的,都是对题目进行正确的建模——针原创 2016-11-28 19:50:50 · 4432 阅读 · 0 评论 -
证明:任意整数与其倒序数的差能被9整除
什么是倒序数,举个例子,1234的倒序数就是4321,9527的倒序数就是7259证明过程:假设整数X是两位数a1a2,则其倒序数Y就是a2a1X-Y = a1a2 - a2a1 = 10 (a1 - a2) + (a2 - a1) = 10(a1 - a2) - (a1 - a2) = (10 -1)(a1 - a2) = 9 (a1 -a2)因为0能被任何非原创 2016-02-16 11:00:40 · 1686 阅读 · 0 评论 -
计算一个整数的二进制表示有多少个1(别人的最快算法)
最近看了这篇文章 的第一道题题目本意是怎么判断这段代码的输出int func(x){ int countx =0; while(x) { countx ++; x = x&(x-1); } return countx;}但深入一想,这不就是求任意整数的二进制表示里有多少个1吗?要想解决上述问题原创 2015-12-28 14:34:20 · 2628 阅读 · 0 评论 -
leetcode第一题,正整数转英语书面语
123 -> "One Hundred Twenty Three"12345 -> "Twelve Thousand Three Hundred Forty Five"1234567 -> "One Million Two Hundred Thirty Four Thousand Five Hundred Sixty Seven"代码class Solution(object):原创 2015-09-16 14:18:23 · 554 阅读 · 0 评论 -
左旋字符串的一种野路子解法,时间复杂度O(2N)
* 题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。 * 如把字符串abcdef左旋转2位得到字符串cdefab。 * 请实现字符串左旋转的函数。要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。据说是微软面试题,想挑战一把自己,于是不看答案闷头想了两天,得到一次优解-_-!题目可抽象成:数组由1 2 3 ...原创 2014-11-22 09:21:21 · 1537 阅读 · 0 评论 -
寻找单链表的倒数第N个节点
老婆今早面试苹果的radio协议测试岗位(非开发),给了这个题目,当时她是两次遍历(一次找出总节点数M,一次找出第M-N节点),我也想不出更高明的办法但总觉得伴随指针能做到只遍历一遍,想了想,得解:#include using namespace std;struct Node{ Node(int d, Node *n):data(d), next(n){}原创 2014-11-14 21:51:33 · 1201 阅读 · 0 评论 -
面试题isSubstr(a,b)试做
新浪微博的@文艺复兴记 tiele原创 2014-08-30 22:11:02 · 1196 阅读 · 0 评论 -
向方阵写入螺旋数——C++实现
来自安捷伦的一道笔试题,向NxN数组按螺旋的方式写入1——NxN的自然数 自己想的思路,核心是1、如何决定是否该转弯?方法是看是否“到达数组边界(前期)”或者是否“下一个要写入的方向已经有数(后期)”2、如何选择退出条件?方法是看写入数是否达到NxN 上代码#include #include #include #include using namespa原创 2013-11-25 21:17:42 · 2589 阅读 · 0 评论 -
找出1234的一种排列,使得组成的数能被7整除
是腾讯2011年的笔试题,我没看答案,自己想出的笨办法,是按字面意思来,即先求出所有可能的排列,然后对每种排列验算是否被7整除关键是生成所有排列,幸好研究过Scheme语言,对递归有心得,代码如下#include #include using namespace std;int calc(char *p_base_addr, char base_len){原创 2013-11-04 23:28:05 · 1488 阅读 · 0 评论 -
一道ACM试题:洲际公路【待修正】
说有一条洲际公路要穿越小镇北郊,人们为了免受噪音污染,决定在北郊种树隔音,幸运的是北郊有很多部分建起了超市等大型商业建筑足以隔音,所以只要在没有建筑的地方种树就行。现在假如给定北郊的长度,并且输入每栋已存在的商业建筑的起始坐标(距离北郊最左端的距离)与终止坐标(距离北郊最左端的距离)——注意输入的坐标对是随意的,就是说北郊的各栋建筑乱序输入各自的坐标对。问有多少地方要种树。原创 2009-11-28 20:30:00 · 1403 阅读 · 0 评论 -
【非递归】判断一个整数是否能表示成2的指数形式(已附weapon0916兄的高效解法)
问:判断一个整数是否能表示成2的指数形式思路:若x是2的指数倍的整数,那它的二进制位串中只有一位是1。#include using namespace std;//判断一个整数是否能表示成2的指数形式。要求算法简单。bool p2(int n){ int temp = 0; int l = sizeof(int) * 8; //整型的位宽原创 2009-10-22 20:52:00 · 2289 阅读 · 2 评论 -
打靶问题的一种递归解法
问题:一个射击运动员打靶,靶共有10环,连开10枪打中90环的可能性有多少种?请用递归算法编程实现。思路:一个运动员打出x发子弹,总共命中n环(环数从 10环 到 0环 ——即脱靶-_-!),问命中n环有多少种方式?当打第一法子弹时,运动员可以选择的环数的下限是lowlimit = n - 10*(x-1),若 #include using namespace std;原创 2009-10-22 08:59:00 · 3610 阅读 · 0 评论 -
金山笔试题——数位累加
昨天下午参加了金山的笔试,感觉考语言细节的居多,数据结构和算法很少。最后是两道编程大题,第一题是求一个数的各位累加数 比如 152 -> 1+5+2 -> 8 写的代码回来后跟同学讨论才知道写错了,现在贴上一个正确且较好的算法 int foo(int a){ int result; //存储每次累加后的结果 do{ result =原创 2009-10-13 15:29:00 · 1069 阅读 · 0 评论 -
对一个字符数组的元素进行全排列
基本思路就是:1、判断是否到达数组末尾,若是,输出数组,返回。2、否则依次取出片段数组的每个元素,对剩下的元素组成的片段数组再进行排列。注意,生成第二步的剩余片段数组的技巧是将每个元素与片段首个元素互换,这样首个元素之后到数组末尾的连续元素 就是 剩余片段数组——当然,互换完了还要互换回来,否则 第二步的剩余片段数组 的内容就会混乱。 #include #include原创 2009-07-23 08:47:00 · 2148 阅读 · 1 评论 -
用中点位移法绘制山脉的一个粗糙AS3演示
代码import flash.geom.Point;var MINI = 0.5;//MINI指的是每个中点的振幅缩小速率var W = stage.stageWidth;var H = stage.stageHeight;var iter:int = 5;//迭代次数,值越大,山脉越平滑var left:Point,right:Point;left = new Poi原创 2009-05-26 16:33:00 · 1091 阅读 · 0 评论 -
分形技术的一个简单示例——雪花图案(AS3实现)
分形的概念看这里这里用AS3实现一个动态绘制雪花图案的功能你只要在界面用鼠标拖动,就会妙笔生雪花package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.geom.Point; /**原创 2009-04-24 08:45:00 · 3645 阅读 · 1 评论 -
归并排序中的一个注意事项
void mymerge(int a[],int l,int r){ if (l mymerge(a,l,(l+r)/2); //晕死!把数组的任意一个片段分成两半的方法应该是(l+r)/2而不是r/2 mymerge(a,(l+r)/2+1,r); hebing(a,l,(l+r)/2,(l+r)/2+1,r); }}二分查找也要注意同原创 2008-10-29 14:48:00 · 743 阅读 · 0 评论 -
用递归方式翻转字符串
#includeusing namespace std;void reverse_str(char* a){ if( *a != /0 ) reverse_str(a+1); //不能写成 reverse_str(a++),原因是传递给子被调 函数的参数一直没变!! cout }int main(){ char *b="abcdef";原创 2008-04-24 10:50:00 · 1036 阅读 · 0 评论