- 博客(127)
- 资源 (1)
- 收藏
- 关注
原创 程序员的README——编写可维护的代码(一)
用户行为不可预测,网络不可靠,事情总会出错。生产环境下的软件必须一直保持可用状态。编写可维护的代码有助于你应对不可预见的情况,可维护的代码有内置的保护、诊断和控制。切记通过安全和有弹性的编码实践进行防御式编程来保护你的系统,安全的代码可以预防许多故障,而弹性的代码可以在故障发生时,进行恢复。一个可维护的系统具有可配置参数和系统工具。
2024-03-18 20:55:24 378
原创 程序员的README——玩转代码
小故事代码库就像阿尔勒的那个圆形剧场一样。一代人写了几层,然后又改了改。很多人都接触过这些代码。测试缺失或强制执行已经过时的设定,不断变化的需求扭曲了代码的使用。
2024-03-13 23:17:43 430
原创 程序员超强大脑——避免低质量代码和认知负荷:两种框架
除了方法层面和类层面的代码异味,整个代码也可能存在异味。如果代码库的不同位置出现相同或极为相似的代码,那么表明存在“重复的代码(代码克隆)”异味。如果方法包括多行代码并提供多种功能,那么表明存在“过长的方法”异味或“上帝方法”异味;如果方法传入太多参数,则表明存在“过长的参数列表”异味。代码异味既可能与方法有关,也可能与类有关,过大的类就是一例。有异味不一定说明代码错误,但有异味的代码往往更容易出错。影响的代码,即代码本省没有错误,但构造方式不理想。代码异味: 结构不理想的代码。来描述这类代码问题。
2024-03-10 17:36:40 350
原创 程序员超强大脑——提高命名的质量(二)
代码库保持一致不仅便于其他人查找标识符包含的重要元素,也有助于在该标识符与其他标识符之间建立联系。Feitelson认为,在选择标识符所包含的内容时,应该重点考虑标识符的目的,即标识符能否体现出对象的信息及其用途。为提高命名的一致性,可以考虑建立项目词库,把所有重要的定义记录在案,并给出同义词的替换词。找到合适的单词通常并不难,显然应该选择一个在代码领域或整个代码库中使用特定单词。这一步具有极强的领域待定性,思考标识符包含哪些概念也许是命名中最重要的决定。
2024-03-06 21:16:42 387
原创 程序员超强大脑——迷死概念:错误的思维方式
错误有时源于粗心大意,例如忘记关闭文件或拼错文件名,但更多情况下是由思维方面的错误所致——程序员可能不知道文件使用完毕后需要关闭,或认为编程语言会自动关闭文件。
2024-03-05 00:30:00 417
原创 程序员超强大脑——更好地解决编程问题(二)
例如,虽然并不存在能够出存储数值的实体,但程序员还是会将变量描述为“保存”值的实体,类似与把变量比作存放值的盒子的心智模型。在学习基本类型时,程序员可能把变量看作存放值的一个盒子;而在接触到符合类型后,程序员可能把数组看作一摞盒子,每个盒子存放一个简单值。例如,将变量描述为盒子的概念机器不同于将变量描述为名称标签的概念机器,二者无法合并为一个一致的模型。程序员可以截止概念机器将现有的图式应用于编程,从而帮助自己理解编程概念。概念机器是计算机的抽象表征,可以借此分析计算机执行的操作。
2024-03-03 23:05:52 430
原创 程序员超强大脑——恍然大悟小故事
英国剑桥和首都伦敦相距50英里,一列火车从剑桥开往伦敦,另一列火车从伦敦开往剑桥,两列火车同时出发,时速均为50英里。第一列火车驶出车站时,落在车上的一只小鸟以每小时75英里的速度飞向第二列火车,到达第二列火车时又掉头飞向第一例火车,就这样来回飞行,直到两列火车相遇。那么,当两列火车相遇时,小鸟的飞行距离是多少?
2024-03-02 16:50:06 466
原创 vs调试必须会的两个方式
就是条件断点。有时候设置断点,是想获取,当A是指定值的情况下的该部分的变化。比如:for(int i=0;i<200;i++){ //.......}而你想知道i=100的时候,循环体内的变化。按100下F5,显然有点。。。累vs提供了一个很好的调试方式——条件断点(满足某条件时,断点生效)(1)设置断点(2)右击断点(Alt+F9,C),设置条件(i==100)...
2018-10-08 20:38:41 621
转载 WPF 中 MVVM 模式中最重要的两个类(内容来源于网络)
DelegateCommand.cs public class DelegateCommand : ICommand { Func<object, bool> canExecute; Action<object> executeAction; bool canExecuteCache; pu...
2018-08-02 16:08:09 489
原创 1052. 卖个萌 (20)
萌萌哒表情符号通常由“手”、“眼”、“口”三个主要部分组成。简单起见,我们假设一个表情符号是按下列格式输出的:左手[右手] 现给出可选用的符号集合,请你按用户的要求输出表情。输入格式:输入首先在前三行顺序对应给出手、眼、口的可选符号集。每个符号括在一对方括号[]内。题目保证每个集合都至少有一个符号,并不超过10个符号;每个符号包含1到4个非空字符。之后一行给出一个正整数K,为用户请求的个数。随后K
2017-09-06 09:30:50 302
原创 求一个整数位数的终极方法
int main(void){ int n = 32561; cout << 1+(int)log10(n); return 0;}
2017-09-03 15:23:13 326
原创 1059. C语言竞赛(20)
C语言竞赛是浙江大学计算机学院主持的一个欢乐的竞赛。既然竞赛主旨是为了好玩,颁奖规则也就制定得很滑稽:冠军将赢得一份“神秘大奖”(比如很巨大的一本学生研究论文集……)。排名为素数的学生将赢得最好的奖品 —— 小黄人玩偶!其他人将得到巧克力。给定比赛的最终排名以及一系列参赛者的ID,你要给出这些参赛者应该获得的奖品。输入格式:输入第一行给出一个正整数N(<=10000),是参赛者人数。随后N行
2017-09-03 11:08:59 230
原创 1013. 数素数 (20)
令Pi表示第i个素数。现任给两个正整数M <= N <= 104,请输出PM到PN的所有素数。输入格式:输入在一行中给出M和N,其间以空格分隔。输出格式:输出从PM到PN的所有素数,每10个数字占1行,其间以空格分隔,但行末不得有多余空格。输入样例: 5 27 输出样例: 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89
2017-09-02 17:09:32 313
原创 1030. 完美数列(25)
给定一个正整数数列,和正整数p,设这个数列中的最大值是M,最小值是m,如果M <= m * p,则称这个数列是完美数列。现在给定参数p和一些正整数,请你从中选择尽可能多的数构成一个完美数列。输入格式:输入第一行给出两个正整数N和p,其中N(<= 105)是输入的正整数的个数,p(<= 109)是给定的参数。第二行给出N个正整数,每个数不超过109。输出格式:在一行中输出最多可以选择多少个数可以用它们
2017-09-02 16:43:39 182
原创 1018. 锤子剪刀布 (20)
大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示:现给出两人的交锋记录,请统计双方的胜、平、负次数,并且给出双方分别出什么手势的胜算最大。输入格式:输入第1行给出正整数N(<=105),即双方交锋的次数。随后N行,每行给出一次交锋的信息,即甲、乙双方同时给出的的手势。C代表“锤子”、J代表“剪刀”、B代表“布”,第1个字母代表甲方,第2个代表乙方,中间有1个空格。输出格式:输出
2017-09-02 11:15:04 182
原创 1049. 数列的片段和(20)
给定一个正数数列,我们可以从中截取任意的连续的几个数,称为片段。例如,给定数列{0.1, 0.2, 0.3, 0.4},我们有(0.1) (0.1, 0.2) (0.1, 0.2, 0.3) (0.1, 0.2, 0.3, 0.4) (0.2) (0.2, 0.3) (0.2, 0.3, 0.4) (0.3) (0.3, 0.4) (0.4) 这10个片段。给定正整数数列,求出全部片段包含的所有的数
2017-09-02 10:18:50 178
原创 1043. 输出PATest(20)
给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按“PATestPATest….”这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按PATest的顺序打印,直到所有字符都被输出。输入格式:输入在一行中给出一个长度不超过10000的、仅由英文字母构成的非空字符串。输出格式:在一行中按题目要求输出排序后的字符串。题
2017-09-02 10:02:48 190
原创 0-1背包
最主要是要看懂下面这张表:int main(void){ int goods_num = 3;//总共三件物品 int worth_num = 5;//背包容量最大为5 int goods[] = { 0,60,100,120 };//物品的价值 int weight[] = { 0,1,2,3 };//物品的重量 /*即 物品1 重1斤,价值60人民币*/
2017-08-30 20:03:33 394
原创 最长连续公共子串
时间限制:1秒 空间限制:32768K 给出两个字符串(可能包含空格),找出其中最长的公共连续子串,输出其长度。 输入描述: 输入为两行字符串(可能包含空格),长度均小于等于50.输出描述: 输出为一个整数,表示最长公共连续子串的长度。输入例子1: abcde abgde输出例子1: 2#include<stdio.h>#include<vector>#include<stri
2017-08-30 17:46:25 937
原创 最长公共子序列(动态规划)
串1:ABCBDAB len1=7 串2:BDCABA len2=6计算这两个串的最长公共子序列。解这个题,最重要的是,对表格的理解。 建立一张7*8的表格,多出来的一行一列,用做当该串是空串的时候,应该怎么做。 很明显需要初始化为0(空串和任何串都不能有公共子序列)。int main(void){ string str1 = "ABCBDAB"; str
2017-08-30 16:36:09 289
原创 大富翁游戏
时间限制:1秒 空间限制:32768K 大富翁游戏,玩家根据骰子的点数决定走的步数,即骰子点数为1时可以走一步,点数为2时可以走两步,点数为n时可以走n步。求玩家走到第n步(n<=骰子最大点数且是方法的唯一入参)时,总共有多少种投骰子的方法。 输入描述: 输入包括一个整数n,(1 ≤ n ≤ 6)输出描述: 输出一个整数,表示投骰子的方法输入例子1: 6输出例子1: 32/*手写,算
2017-08-30 11:27:16 3949
转载 辗转相除法求最大公约数
//递归版本int gcd(int a, int b) { return b == 0 ? a : gcd(b, a%b);}//非递归版本int gcd(int a, int b) { int c; while (b != 0) { c = a % b; a = b; b = c; } return a;}
2017-08-29 19:24:58 307
原创 字符流中第一个不重复的字符
时间限制:1秒 空间限制:32768K 热度指数:34735 本题知识点: 字符串题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符”go”时,第一个只出现一次的字符是”g”。当从该字符流中读出前六个字符“google”时,第一个只出现一次的字符是”l”。 输出描述: 如果当前字符流没有存在出现一次的字符,返回#字符。题解:应用哈希表的思想,将
2017-08-12 02:02:00 285
原创 归并排序
#include<stdio.h>#include<stdlib.h>#define N 18void Merge(int *a,int low,int mid,int high,int *b){//将一个数组按照从小到大的顺序排序 int i = low; int j = mid + 1; int k = low; while (i <= mid &&j <=
2017-08-07 10:06:44 173
原创 shell排序
#include<stdio.h>#include<stdlib.h>//输出void print(int *a,int length){ for (int i = 1; i < length; i++) printf("%d ",a[i]); printf("\n");}//shell排序的过程//数组第一个数据,不使用。void pro(int *a,
2017-08-07 09:10:53 306
原创 KMP详解
首先,next数组是怎么得来的???i 为指向字符串T的下标的变量, j 是指向以 i-1 位置为结束的字符的字符串的 相同的前后缀最长的 前缀的结束字符的下标。next数组实质上是,在 i 的位置之前的字符串的前缀(不包含本身)和后缀(不包含本身)的相同的字符的个数。一、给next[0]赋值为-1,因为第一个字符之前没有任何的字符串,用-1来标志已经将 i 位置之前整个字符串比较完毕。二、
2017-08-04 16:28:00 203
原创 快速排序
//快速排序之获得点int QSort(int *a, int i, int j){ a[0] = a[i];//将与之比较的点 while (i<j) { while (i<j&&a[0]<a[j])//找到比他小的第一个点 { j--; } if (a[0] > a[j])//如果
2017-07-28 16:05:51 187
原创 折半插入排序
折半插入的本质上,依旧是插入排序,只是在寻找插入点的时候将使用折半查找,用以减少查找数据的次数。数组的第0个元素不在排序序列中,用来保存将要插入的数据。//折半直接插入排序void BinsrySort(int *a, int length){ //第0号元素不使用 for (int i = 1; i < length; i++) { a[0] = a[i
2017-07-28 15:17:42 238
原创 直接插入排序
//直接插入排序void InsertSort(int *a,int length){//0,11,1,2,3,7,8,9,4,5,6,10 //0号元素不使用 for (int i = 2; i < length; i++) { a[0] = a[i]; int j = i - 1; while(j>0&&a[0]<a[j
2017-07-28 14:59:47 158
原创 折半查找
查找 5 成功查找失败high比low小,则查找失败//折半查找typedef struct{ int num;}student;typedef struct{ int length; student st[MAX + 1];}student_t;int Binary_Search(student_t st_t, student st){ int lo
2017-07-26 18:00:45 186
原创 线性查找
//线性查找//将第0个元素,做为防止越界的标记//从后往前查typedef struct { int num;}student;typedef struct{ int length; student st[MAX+1];}student_t;int search1(student_t st,int flag){ int i = st.length;
2017-07-26 17:47:30 287
原创 二叉排序树创建、查找、删除
一、二叉树的结构体结构typedef struct tree{ int date; tree *lchild; tree *rchild;}tr_t;二、二叉排序树的创建void creat_BStree(tr_t ** tr,int num){ if ((*tr) == NULL) { (*tr) = (tree*)malloc(s
2017-07-26 17:46:09 427
原创 输出二叉树中叶子结点的个数
int leaf(tree * root){ if (root == NULL)//如果根节点为空,则返回空 return 0; else if (root->lchild == NULL&&root->rchild == NULL)//如果左孩子和右孩子同时为空,则叶子节点的数加+1 return 1; else retur
2017-07-24 10:19:16 7731 3
原创 二叉树按层遍历输出——双指针法(图解)
(一)申请一个vector的容器vt。 (二)设置两个指针(当然,不是必须是指针形式的指针,可以用数组的下标代替,只是采用指针这个思想),这两个指针一个指向当前访问的节点——cur(标志目前访问的是哪个节点),另外一个指向当前层访问节点的最后一个节点——end(标志当前层访问结束)。 (三)对两个指针的初始化:首先在根节点不为NULL的情况下,将根节点装入容器,然后cur从0开始,end等于容器
2017-07-24 09:59:41 1348
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人