汉诺塔问题

描述

给定A、B、C三根足够长的细柱,在A柱上放有n个中间有孔的圆盘,共有n个不同的尺寸,现要将这些圆盘移到C柱上,在移动过程中可放在B柱上暂存。要求:
(1)每次只能移动一个圆盘;
(2)A、B、C三根细柱上的圆盘都要保持上小下大的顺序;
任务:设An为n个圆盘完成上述任务所需的最少移动次数,对于输入的n,输出An以及移动过程

输入盘子的个数输出移动的移动的路径和次数

样例输入

3

 

样例输出

move A->C
move A->B
move C->B
move A->C
move B->A
move B->C
move A->C
7

 

继续阅读汉诺塔问题

2019/4/26 服务器故障排查

今天不知道怎么回事发现媒体库进不去提示JS错误,富文本编辑器无法启动(似乎早就发生了,但是今天我才笨拙的发现)。。

具体情况是这样的

重大事故,各种还原,清理缓存,重启服务器,对照修改.php文件都没用。凭借三天前的那个备份大胆的试了十多种方法(还特意备份了这三天的十多篇文章),全都没用,百度上全都是骗人的。着急到自闭。。

于是想起来了类比windows系统的安全模式,是不加载外部程序的。那么我也全部关闭wordpress的外部插件,让wordpress的插件们逐一启动,然后看看是在哪出的问题,最终启动到tinyMCE advance(富文本编辑器增强工具)时,炸了。

原因据我推测,可能是我以前手动在function.php增强过自带的tinyMCE编辑器。然后这个插件在function.php插入增强函数和我写的名字一样,,就冲突无法显示了。。

我曾写的wordpress编辑器增强代码

//编辑器增强功能
function add_more_buttons($buttons) {
$buttons[] = 'hr'; //水平线
$buttons[] = 'fontselect'; //字体
$buttons[] = 'fontsizeselect'; //字号
$buttons[] = 'styleselect'; //样式,格式
$buttons[] = 'wp_page'; //分页符
$buttons[] = 'cut'; //剪切
$buttons[] = 'backcolor'; //背景色
return $buttons;
}
add_filter("mce_buttons_3", "add_more_buttons");//------------>在这一行发生冲突

//添加字体
function add_fontfamily($initArray){
  $initArray['font_formats'] ="幼圆='幼圆';英文可爱字体=comic sans ms,sans-serif;微软雅黑='微软雅黑';宋体='宋体';黑体='黑体';仿宋='仿宋';楷体='楷体';隶书='隶书';Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=v erdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats";
  return $initArray;
}

function.php的冲突直接导致了PHP编译生成的html的首行不是<!DOCTYPE html>

不符合标准(PS:<!DOCTYPE> 声明帮助浏览器正确地显示网页。

于是就崩溃了。

解决方案就是:禁用所有插件,控制变量,逐一启动,看看到底是谁在作妖,然后干掉。

抢救历时4个半小时,心态也炸了好几次。。。不过还好最后成功了!

血和泪的教训告诉我们:
一定要备份!
一定要备份!!
一定要备份!!!

C常用字符串转换函数

1.int/float to string/array:

C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串,下面列举了各函数的方法及其说明。
● itoa():将整型值转换为字符串。
● ltoa():将长整型值转换为字符串。
● ultoa():将无符号长整型值转换为字符串。
● gcvt():将浮点型数转换为字符串,取四舍五入。
● ecvt():将双精度浮点型值转换为字符串,转换结果中不包含十进制小数点。
● fcvt():指定位数为转换精度,其余同ecvt()。

除此外,还可以使用sprintf系列函数把数字转换成字符串,其比itoa()系列函数运行速度慢

2. string/array to int/float

C/C++语言提供了几个标准库函数,可以将字符串转换为任意类型(整型、长整型、浮点型等)。

● atof():将字符串转换为双精度浮点型值。
● atoi():将字符串转换为整型值。
● atol():将字符串转换为长整型值。
● strtod():将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字。
● strtol():将字符串转换为长整值,并报告不能被转换的所有剩余数字。
● strtoul():将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字。

因为是C语言的函数,所以string在使用时间要转化成char *类型,用string向下兼容的函数string::c_str()来实现。

【模拟/字符串】DRM Messages

DRM Encryption is a new kind of encryption. Given an encrypted string (which we’ll call a DRM
message), the decryption process involves three steps: Divide, Rotate and Merge. This process is
described in the following example with the DRM message “EWPGAJRB”:
Divide — First, divide the message in half to “EWPG” and “AJRB”.
Rotate — For each half, calculate its rotation value by summing up the values of each character
(A = 0, B = 1, . . . Z = 25). The rotation value of “EWPG” is 4 + 22 + 15 + 6 = 47. Rotate each
character in “EWPG” 47 positions forward (wrapping from Z to A when necessary) to obtain the
new string “ZRKB”. Following the same process on “AJRB” results in “BKSC”.
Merge — The last step is to combine these new strings (“ZRKB” and “BKSC”) by rotating each character
in the first string by the value of the corresponding character in the second string. For the first
position, rotating ‘Z’ by ‘B’ means moving it forward 1 character, which wraps it around to ‘A’.
Continuing this process for every character results in the final decrypted message, “ABCD”.
Input
The input file contains several test cases, each of them as described below.
The input contains a single DRM message to be decrypted. All characters in the string are uppercase
letters and the string’s length is even and ≤ 15000.
Output
For each test case, display the decrypted DRM message.
Sample Input
EWPGAJRB
UEQBJPJCBUDGBNKCAHXCVERXUCVK
Sample Output
ABCD
ACMECNACONTEST

分析:按照题意模拟,另外使用取模别用减法 继续阅读【模拟/字符串】DRM Messages

【二叉树】求层序二叉树LCA

如上图所示,由正整数1, 2, 3, …组成了一棵无限大的二叉树。从某一个结点到根结点(编号是1的结点)都有一条唯一的路径,比如从10到根结点的路径是(10, 5, 2, 1),从4到根结点的路径是(4, 2, 1),从根结点1到根结点的路径上只包含一个结点1,因此路径就是(1)。对于两个结点x和y,假设他们到根结点的路径分别是(x1, x2, … ,1)和(y1, y2, … ,1)(这里显然有x = x1,y = y1),那么必然存在两个正整数i和j,使得从xi 和 yj开始,有xi = yj , xi + 1 = yj + 1, xi + 2 = yj + 2,… 现在的问题就是,给定x和y,要求xi(也就是yj)。输入输入只有一行,包括两个正整数x和y,这两个正整数都不大于1000。输出输出只有一个正整数xi。样例输入

10 4

样例输出

2

 

继续阅读【二叉树】求层序二叉树LCA