
数据结构与算法
文章平均质量分 75
ken_scott
这个作者很懒,什么都没留下…
展开
-
【试题】排列组合
在写一个远程的代码,如果本地有M个显示器,远程有N个显示器(M<=N),依据分辨率、显示器刷新频率等要求,需要对远程的N个显示器进行最佳分辨率修改,之后,需要从N个远程显示器中选择M个,跟本地显示器进行一对一的匹配。即从 A(N, M) = N! / (N-M)! 种组合选择1种最优匹配,这里用到了排列组合,而 std::next_permutation()用于全排列A(N, N) = ...原创 2020-04-26 18:10:57 · 345 阅读 · 0 评论 -
辛波那契数列
大学时参加过一次“有道难题”的网上初赛,当时碰到了这题,当时没有写出满足要求的答案,之后便没再参加这种竞赛了题目描述如下:菲波那契数列可以用下列的式子表示:f(1)=1f(2)=1f(n)=f(n-1)+f(n-2) (n>=3)现在我们根据这个规则定义另一种数列,命名为“辛波那契数列”,它是这样定义的:s(x)=0 (xs(x)=1 (0s(x)=s(x-1)原创 2012-08-12 20:12:48 · 1824 阅读 · 1 评论 -
不用+-*/%实现整数的+-*/%运算
可能计算机相关专业有教授过相关的知识,这里只是作为一个非计算机专业人员的实现方法,模仿十进制的相关运算方法加以实现:#include using std::cout;using std::endl;using std::ostream;struct divide_modulo_zero_exception{ static const char msg[64];原创 2012-08-10 18:29:27 · 923 阅读 · 0 评论 -
打印满足勾股定理的互素的整数a,b,c
#include using namespace std;int gcd(int a, int b){ return(0 == a ? b : gcd(b % a, a));}void pythagorean(int maxa){ for (int a = 1; a <= maxa; ++a) { int a2 = a原创 2012-07-24 21:56:36 · 2349 阅读 · 0 评论 -
rudp
lock.h:#ifndef __LOCK_H__#define __LOCK_H__#include class MutexLocker{public: MutexLocker(); ~MutexLocker(); void lock(); void unlock();private: pthread_mutex_t m_lock原创 2012-07-24 14:06:27 · 10148 阅读 · 4 评论 -
银江股份面试
昨天上午银江股份面试,坦白地说,笔试题做的很不好,看到倒数第二题就有不想做的感觉:因为这是《算法导论》的最大公共字串问题,没记错的话,要用到动态规划,运筹学的知识,难!所以,我给自己下了结论:在规定的时间内(接待人员给的是50分钟),我极可能做不出来,加上前面的SQL,文字题什么的根本不会,我估摸又没戏,所以,提前交卷了,不过面试官珊珊来迟,我在这个空档也没事,也就又写了下,正起身去取回答题卷,面原创 2012-06-06 09:38:52 · 6457 阅读 · 0 评论 -
恒生电子笔试题:LoopMove
循环移动字符串:比如 "abcdefghi" 移动2就变成 "hiabcdefg"当时实现:void LoopMove(char * str, unsigned int nsteps){ assert(NULL != str); int len = strlen(str); nsteps %= len; while (nsteps > 0) {原创 2012-05-03 22:33:50 · 3495 阅读 · 2 评论 -
试题: 小白鼠问题
刚看到这个帖子:C++编程,小白鼠问题,开始没有什么思路,刚躺下,想到了。。。原题:有一家生化所,一月份引入一对新生的小白鼠。这对小白鼠生长两个月后,在第三、第四、第五个月各繁殖一对新小白鼠,在第六个月停止繁殖,在第七个月则死亡。新生的小白鼠也如此繁殖。问在第N个月时,活的小白鼠有多少对?思路:第N个月的对数 就是 第N-1月时 1-5个月(当时的1-5)的对数 加上 下一个月原创 2012-04-19 03:08:24 · 2447 阅读 · 0 评论 -
整数二进制位反转
无意间想到这个,写写:#include template IntType binary_reverse(IntType number){ size_t bit_count = sizeof(IntType) << 3; IntType max_signed = ~((IntType)1 << (bit_count - 1)); IntType re原创 2012-10-26 00:24:32 · 790 阅读 · 0 评论 -
怪物过河问题
高一的时候,同学(老友)问过这个题,我现在还记得他当时的话语:“这道题,我们那边的一个大学生想了三天都没想出来,呵呵,让我解决了,厉害吧,哈哈。。。”。当时,我也是冲着他那句“大学生三天都没想出来”,才兴致勃勃地答应挑战的,可惜,当时终究是没想出来,最后,只好逼着他讲答案。当然,经历过大学的人都知道,其实大学生也就那样,大多很普通,无须过高的评价。题意大致如下:有6个怪物AaBbCc,AB原创 2012-08-12 21:10:25 · 1433 阅读 · 0 评论 -
试题:Triangle
无意中看到别人博客上的这个题目题目原型:Given a triangle, find the minimum path sum from top to bottom. Each step you may move to adjacent numbers on the row below.For example, given the following triangl原创 2014-04-03 20:18:35 · 910 阅读 · 0 评论 -
试题: 打印格雷码
好久没做算法题了,来一个 格雷码 - 概念(百度百科):在一组数的编码中,若任意两个相邻的代码只有一位二进制数不同,则称这种编码为格雷码(Gray Code),另外由于最大数与最小数之间也仅一位数不同,即“首尾相连”,因此又称循环码或反射码。在数字系统中,常要求代码按一定顺序变化。例如,按自然数递增计数,若采用8421码,则数0111变到1000时四位均要变化,而在实际电路中,4位的变原创 2013-10-04 22:05:52 · 1508 阅读 · 0 评论 -
两个升序数组的中位数
一般情形的解法:#include double median(int arr[], int size){ if (1 == size % 2) { return(arr[size / 2]); } else { return((arr[size / 2 - 1] + arr[size / 2]) / 2.0);原创 2013-05-08 16:00:16 · 1157 阅读 · 0 评论 -
求升序数组中绝对值最小的元素
题目来源:http://blog.youkuaiyun.com/linygood/article/details/8898691自己写了下:#include #include int min_abs(int * arr, int size){ if (arr[0] >= 0) { return(arr[0]); } if (原创 2013-05-10 13:42:50 · 998 阅读 · 0 评论 -
base64字符转码
项目里的实现是直接调用openssl里面的函数,感觉不好,想改,但是很多人都在用那些接口了,所以,不方便改动项目里的接口与实现。 下面是自己的实现,还是下了些心思才有这份实现的 #include #include #define BASE64_ENCODE_SIZE(input_len) ((input_len + 2) / 3 * 4 + 1)#define原创 2013-02-17 23:46:51 · 881 阅读 · 0 评论 -
包围的区域
问题来源: http://www.blogjava.net/sandy/archive/2013/04/15/397875.html问题: 给定一个2D的棋盘, 含有'X'和'O', 找到所有被'X'包围的'O', 然后把该区域的'O'都变成'X'#include #include enum FLAG{ X = 'X', O = 'O' };原创 2013-04-25 18:30:13 · 866 阅读 · 0 评论 -
求整数n的二进制表达式中1的个数
题目看过不少次,写起来也不难,最近才发现还有很多我以前没有想到的优雅方案关于这个的解法,http://wenku.baidu.com/view/81dfec47be1e650e52ea99e0.html 中还有很多,不少看不懂,下面是我看得懂而且比较喜欢的:#include unsigned int get_count_1(unsigned int x){ unsig原创 2013-04-23 20:02:44 · 1111 阅读 · 0 评论 -
求从0到n这n+1个整数的十进制表示中出现m的次数, 其中(9>=m>=0)
网上看到一道题:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数‘ 这里修改下题目:求从0到n这n+1个整数的十进制表示中出现m的次数, 其中(9>=m>=0)例如n为12、m为1:从0到12这些整数中包含1的数字有1、10、11和12,一共有5个1 代码如下:#include /**********************************原创 2013-04-09 00:08:14 · 1523 阅读 · 0 评论 -
BloomFilter简易实现
#ifndef __BLOOM_FILTER_HPP__#define __BLOOM_FILTER_HPP__#include #include template unsigned int GetHash(const T & value){ return(value);}const int prime[] = { 3,原创 2012-04-18 01:11:14 · 977 阅读 · 0 评论 -
BitMap简易实现
#ifndef __BITMAP_HPP__#define __BITMAP_HPP__#include #include class BitMap{public: BitMap(int min, int max); ~BitMap(); bool set(int value); bool clear(int value); bool te原创 2012-04-16 23:22:22 · 675 阅读 · 0 评论 -
简单的加解密工具
目的: 一、部分私人文件不想让别人看到, Linux下又不能用Windows上的加解密工具 (也许有现成的东西, 只是我自己不知道吧, 不过也懒得搜了) 二、最近再看APUE, 写点代码当实践与复习 (发现又开始忘了)算法: 文件字节与密钥顺序进行异或功能: 一、对指定文件加密或解密 二、对指原创 2012-03-26 05:01:57 · 773 阅读 · 0 评论 -
试题:求1000000以内的素数
之前无聊时, 写的找素数的代码, 记得当年考二级C时, 有这么一道上机题, 那时候求稳, 效率肯定不高, 所以今天用了排除法来做先给出总的测试代码:#include #include #include using namespace std;#define MAX_DATA 1000000int size;int data[MAX_DATA / 2 + 1]原创 2012-02-01 18:18:54 · 3151 阅读 · 2 评论 -
试题:全排列
#include using namespace std;#define NUM_COUNT 6int count; // 全排列个数int num[NUM_COUNT]; // 给定全排列数据void swap(int & a, int & b){ if (a != b) { a ^= b;原创 2011-12-30 18:16:54 · 786 阅读 · 0 评论 -
试题:组合
#include using namespace std;#define NUM_COUNT 6int size; // data数组中记录元素个数int count; // 组合个数int num[NUM_COUNT]; // 给定组合数据int data[NUM_COUNT]; // 参与组合元素voi原创 2011-12-30 18:13:55 · 676 阅读 · 0 评论 -
试题:如何利用一个6面概率均匀的骰子把一个苹果公平地交给七个孩子中的某一个(上)
写作该文的目的是出于对帖子: 一个骰子有6面, 概率均匀, 我如何选择7件事? 有些疑问和想法帖子中对8楼的方案呼声最高:8楼的方案如下:用一个骰子扔一次得到x, 再仍一次得到y, 如果x, y都为6就不算, 重来该方案原理是利用表达式(6x-6+y)可以得到[1, 36], 再去除x, y都为6的情形, 得到[1, 35], 这35个数字对7取余后再加1, 就会得到5个1,原创 2012-02-12 18:38:52 · 1519 阅读 · 0 评论 -
试题:组合的模板非递归实现
#include #include #include using namespace std;template void show(const vector & element, const vector & index){ assert(index.size() > 0); assert(element.size() >= index.size()原创 2012-02-08 12:33:40 · 590 阅读 · 0 评论 -
试题:实现strstr
#include #include using namespace std;char * strstr(char * str1, char * str2){ assert(NULL != str1 && NULL != str2); if ('\0' == *str2) { return str1; } whil原创 2012-02-07 13:25:33 · 684 阅读 · 0 评论 -
试题:找出数组中元素和为指定值的所有组合
本问题来自论坛, 题意大概如下:指定一个数组, 和一个数值, 找出数组中元素和为这个指定数值的所有组合如指定数组元素为[1, 2, 3], 而指定数值为6, 则满足要求的组合为:{1, 2}, {3}#include using namespace std;void solve(int n, int data[], int start, int end,原创 2011-12-30 18:28:31 · 6129 阅读 · 2 评论 -
试题:八皇后问题
问题背景:八皇后问题是一个古老而著名的问题,是回溯算法的典型例题。该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。高斯认为有76种方案。1854年在柏林的象棋杂志上不同的作者发表了40种不同的解,后来有人用图论的方法解出92种结果。#include #inclu原创 2011-12-30 18:20:53 · 904 阅读 · 0 评论 -
初级数独破解
#ifndef __SUDOKU_H__#define __SUDOKU_H__#include struct Region{ int index; // 原始下标 int count; // 已填个数 Region() : index(0), count(0) { } bool operator < (const Region & rh原创 2011-12-06 18:02:49 · 897 阅读 · 0 评论 -
试题:实现堆
堆的实现:#include #include using namespace std;template void __push__heap(RandomAccessIterator start, RandomAccessIterator end, T *, CompareFunc comp){ if (end - start =原创 2012-02-13 18:15:26 · 482 阅读 · 0 评论 -
试题:输入n, 得到以n为边长的正方形网格, 奇数圈为A, 偶数圈为B
刚在论坛碰到这个题, 记下当时的解法#include using namespace std;void show(unsigned int n){ const char first = (((n + 1) % 4) > 1 ? 'A' : 'B'); const char second = ('A' == first ? 'B' : 'A');原创 2011-12-30 13:04:17 · 794 阅读 · 0 评论 -
新简单内存池
#ifndef __MEMORY_POOL_H__#define __MEMORY_POOL_H__#include using namespace std;#ifndef nullptr#define nullptr (NULL)#endifclass Memory_Pool{private: struct Storage {原创 2012-03-24 21:28:08 · 616 阅读 · 0 评论 -
试题:打印n位水仙花数
水仙花数指的是一个n位数(n≥3), 它的每个位上的数字的n次幂之和等于它本身.(例如:1^3 + 5^3 + 3^3 = 153) , 理论上, 最大的水仙花数不超过34位题目还是从 luciferisnotsatan 博客上看到的, 他的实现见:n位水仙花数由于C++中整数的取值范围受限, 所以下面的代码最大只能计算到n = 19的情形下面是我的实现代码:#include原创 2012-02-17 13:30:45 · 1366 阅读 · 0 评论 -
试题:网易笔试的一道题目
写一个程序,打印出以下的序列。(a),(b),(c),(d),(e)........(z)(a,b),(a,c),(a,d),(a,e)......(a,z),(b,c),(b,d).....(b,z),(c,d).....(y,z)(a,b,c),(a,b,d)....(a,b,z),(a,c,d)....(x,y,z)....(a,b,c,d,.....x,y,z)这道原创 2012-02-16 15:21:42 · 949 阅读 · 0 评论 -
试题:如何利用一个6面概率均匀的骰子把一个苹果公平地交给七个孩子中的某一个(下)
在没看8楼前, 我也想了个方案:取七个骰子, 第一个骰子标号1-6, 第二个7-12, ..., 第六个标号31-36, 第七个标号37-42, 一起扔, 就会得到(1, 42)中的七个值, 这42个值对7取余后加1的结果有7种情况1-7, 且取[1, 7]都有5种情况, 也就是说, 这七个骰子一起扔后, 得到的点数对7取余加1后理论上应该均匀的得到[1, 7], 下面考虑这些经过计算处理的值原创 2012-02-12 18:59:59 · 1747 阅读 · 0 评论 -
试题:用123456789和+-*/组合出100
#include using namespace std;struct MyException{};double Plus(double first, double second){ return (first + second);}double Minus(double first, double second){ retu原创 2012-02-10 18:47:34 · 2267 阅读 · 0 评论 -
试题:集合的划分问题
输入集合{ 1, 2, 3 }输出结果:{ {1}, {2}, {3} }{ {1}, {2, 3} }{ {1, 3}, {2} }{ {1, 2, 3} }试编写相应算法:#include #include #include #include using namespace std;template void set(const vect原创 2012-02-08 18:48:44 · 926 阅读 · 0 评论 -
试题:跳马问题
#include #include using namespace std;const int row = 5;const int col = 5;bool move(int r, int c, int & index, int step[row][col]){ if (r >= 0 && c >= 0 && r < row && c < col && 0原创 2012-02-02 13:40:00 · 1407 阅读 · 0 评论 -
试题:将罗马数字转为阿拉伯数字
#include #include #include #include #include #include #include using namespace std;void Arabic2Roman(int arabic, list & roman){ ......}struct Exception{};int A原创 2012-02-01 18:01:30 · 932 阅读 · 0 评论