Posts List

如何做一个完美的页码跳转

需求 想给系统实现一个选择不同页面的功能,一开始的代码逻辑比较混乱,后来抽象出来就比较清楚了。第一步,咱们先说需求: 问题定义 我们希望实现一个页面切换,每次显示的可选的页码长度都是固定的,比如从第 1 页到第 11 页,从 21 页 到 31 页。这样能够实现一个统一的切换效果,可能还需要考虑一些边界情况。现在,我们令总页码数为 pages,当前选择的页码为 p,p 往左走或者往右走的步长是固定的,令步长为 step。那么我们现在要做的事情可以这么理解,我们要从 1 到 pages 之间截取可用的页码数,假设开始页码为 startIndex,结束页码为 endIndex。抽象一下,我们可以总结出以下几种情况: Condition1 startIndex < 1 && endIndex <= pages Condition2 startIndex >= 1 && endIndex > pages Condition3 startIndex < 1 && endIndex > pages Condition4 startIndex >= 1 && endIndex <= pages 这样抽象成四种情况,这样就比较容易理解。以线段的方式来理解,则是从 1 到 pages 截取页码。 代码实现 Show me the code. func GetPageList(p, step, pages int) ([]int) { pageList := make([]int, 0) startIndex := p - step endIndex := p + step if startIndex < 1 && endIndex <= pages { startIndex = 1 endIndex = startIndex + 2 * step } else if startIndex >= 1 && endIndex > pages { endIndex = pages startIndex = pages - 2 * step } else if startIndex < 1 && endIndex > pages { startIndex = 1 endIndex = pages } // handle some special cases if startIndex < 1 { startIndex = 1 } if endIndex > pages { endIndex = pages } for i := startIndex; i <= endIndex; i++ { pageList = append(pageList, i) } return pageList } 结语 没有思考清楚的时候,你的逻辑是混乱的,写出来的代码也是混乱的。所以先整理好思路,想好应该怎么写,可以画画图,理理思路,这样写出的代码既有逻辑出现 bug 的概率也会大大降低。另外一点,很多人觉得写业务和算法可能就相去甚远,都有时候认真想想,或许你的业务代码也可以抽象成一个小算法。

the sum of two fixed value

the sum of two fixed value description Input an array and an integer, fina a pair of number in the array so that the sum is equals to the inputed integer. If there are several pairs, you can output any pair. For example, if the input array is [1,2,4,5,7,11,15] and an integer 15, because 4 + 11 = 15, hence output 4 and 11. analysis and solution We try to figure out this problem step by step.

differential evolution代码实例(DE算法)

DE算法是遗传算法中一种比较流行的算法,这种算法比较简单,速度也比较快,下面给出一份示例代码 clear all; close all; clc 2 %Function to be minimized 3 D=2; 4 objf=inline(’4*x1^2é2.1*x1^4+(x1^6)/3+x1*x2é4*x2^2+4*x2^4’,’x1’,’x2’); 5 objf=vectorize(objf); 6 %Initialization of DE parameters 7 N=20; %population size (total function evaluations will be itmax*N, must be >=5) 8 itmax=30; 9 F=0.8; CR=0.5; %mutation and crossover ratio 10 %Problem bounds 11 a(1:N,1)=é1.9; b(1:N,1)=1.9; %bounds on variable x1 12 a(1:N,2)=é1.1; b(1:N,2)=1.1; %bounds on variable x2 13 d=(béa); 14 basemat=repmat(int16(linspace(1,N,N)),N,1); %used later 15 basej=repmat(int16(linspace(1,D,D)),N,1); %used later 16 %Random initialization of positions 17 x=a+d.

ROT13加密和解密

问题 ROT13(回转13位)是一种简易的替换式密码算法。它是一种在英文网络论坛用作隐藏八卦、妙句、谜题解答以及某些脏话的工具,目的是逃过版主或管理员的匆匆一瞥。ROT13 也是过去在古罗马开发的凯撒密码的一种变体。ROT13是它自身的逆反,即:要还原成原文只要使用同一算法即可得,故同样的操作可用于加密与解密。该算法并没有提供真正密码学上的保全,故它不应该被用于需要保全的用途上。它常常被当作弱加密示例的典型。 应用ROT13到一段文字上仅仅只需要检查字母顺序并取代它在13位之后的对应字母,有需要超过时则重新绕回26英文字母开头即可。A换成N、B换成O、依此类推到M换成Z,然后串行反转:N换成A、O换成B、最后Z换成M(如图所示)。只有这些出现在英文字母里的字符受影响;数字、符号、空白字符以及所有其他字符都不变。替换后的字母大小写保持不变。 例如,下面的英文笑话,精华句被ROT13所隐匿: How can you tell an extrovert from an introvert at NSA? Va gur ryringbef, gur rkgebireg ybbxf ng gur BGURE thl’f fubrf. 通过ROT13转换,该笑话的解答揭露如下: Ubj pna lbh gryy na rkgebireg sebz na vagebireg ng AFN? In the elevators, the extrovert looks at the OTHER guy’s shoes. 第二次使用ROT13将恢复为原文。 Input 第1行:一个整数T(1≤T≤10)为问题数。 接下来共T行。每行为长度不超过1000个字符的一段文字。内含大小写字母、空格、数字和各种符号等。 Output 对于每个问题,输出一行问题的编号(0开始编号,格式:case #0: 等)。 然后对应每个问题在一行中输出经过ROT13加密后的一段文字。 Sample Input 3 How can you tell an extrovert from an