<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title>他山之石 - 标签 - 菠菜眾長</title><link>https://lruihao.cn/tags/%E4%BB%96%E5%B1%B1%E4%B9%8B%E7%9F%B3/</link><description>他山之石 - 标签 - 菠菜眾長</description><generator>Hugo -- gohugo.io</generator><language>zh-CN</language><managingEditor>1024@lruihao.cn (Lruihao)</managingEditor><webMaster>1024@lruihao.cn (Lruihao)</webMaster><lastBuildDate>Sat, 30 Jul 2022 17:15:44 +0800</lastBuildDate><atom:link href="https://lruihao.cn/tags/%E4%BB%96%E5%B1%B1%E4%B9%8B%E7%9F%B3/" rel="self" type="application/rss+xml"/><item><title>linux 文件权限</title><link>https://lruihao.cn/posts/linux-permission/</link><pubDate>Sat, 30 Jul 2022 17:15:44 +0800</pubDate><author>Lruihao</author><guid>https://lruihao.cn/posts/linux-permission/</guid><description><![CDATA[<p>记录 linux 系统下文件权限相关的内容，Mac OS 下类似。</p>
<h2 id="查看文件权限">查看文件权限</h2>
<p>查看 linux 系统下的文件权限，可以使用 <code>ll</code> 命令或者 <code>ls</code> 命令 带 <code>-l</code>（长列表选项）</p>
<div class="highlight" id="id-1"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">➜  ~ ll
</span></span><span class="line"><span class="cl">total <span class="m">160</span>
</span></span><span class="line"><span class="cl">drwx------@  <span class="m">8</span> liruihao  staff   256B Jul  <span class="m">5</span> 14:47 Applications
</span></span><span class="line"><span class="cl">drwx------@ <span class="m">10</span> liruihao  staff   320B Jul <span class="m">27</span> 11:31 Desktop
</span></span><span class="line"><span class="cl">drwx------+  <span class="m">7</span> liruihao  staff   224B Jun <span class="m">17</span> 15:01 Documents
</span></span><span class="line"><span class="cl">drwx------@ <span class="m">22</span> liruihao  staff   704B Jul <span class="m">29</span> 16:35 Downloads
</span></span><span class="line"><span class="cl">drwx------@ <span class="m">94</span> liruihao  staff   2.9K Jul <span class="m">23</span> 19:02 Library
</span></span><span class="line"><span class="cl">drwx------   <span class="m">4</span> liruihao  staff   128B Nov <span class="m">13</span>  <span class="m">2021</span> Movies
</span></span><span class="line"><span class="cl">drwx------+  <span class="m">6</span> liruihao  staff   192B Nov <span class="m">18</span>  <span class="m">2021</span> Music
</span></span><span class="line"><span class="cl">drwx------+  <span class="m">9</span> liruihao  staff   288B Apr <span class="m">26</span> 10:25 Pictures
</span></span><span class="line"><span class="cl">drwxr-xr-x+  <span class="m">5</span> liruihao  staff   160B Nov <span class="m">14</span>  <span class="m">2021</span> Public
</span></span><span class="line"><span class="cl">drwxr-xr-x   <span class="m">5</span> liruihao  staff   160B Jul <span class="m">29</span> 17:48 file-share
</span></span><span class="line"><span class="cl">drwxr-xr-x   <span class="m">3</span> liruihao  staff    96B Jul <span class="m">26</span> 17:17 node_modules
</span></span><span class="line"><span class="cl">-rw-r--r--   <span class="m">1</span> liruihao  staff    27B Jun <span class="m">24</span> 13:47 package-lock.json
</span></span><span class="line"><span class="cl">drwxr-xr-x  <span class="m">20</span> liruihao  staff   640B Jul <span class="m">29</span> 22:20 workspace
</span></span><span class="line"><span class="cl">-rw-r--r--   <span class="m">1</span> liruihao  staff    86B Jul <span class="m">26</span> 17:17 yarn.lock</span></span></code></pre></td></tr></table>
</div>
</div><p>文件列表信息分为：文件类型、权限、链接数、所属用户、所属用户组、文件大小、最后修改时间、文件名。</p>
<h2 id="文件类型">文件类型</h2>
<p>linux 一共有 7 种文件类型，分别如下：</p>
<ul>
<li>
<p><code>-</code>: 普通文件</p>
</li>
<li>
<p><code>d</code>: 目录文件</p>
</li>
<li>
<p><code>l</code>: 链接文件</p>
</li>
<li>
<p><code>b</code>: 块设备文件</p>
</li>
<li>
<p><code>p</code>: 管道文件</p>
</li>
<li>
<p><code>c</code>: 字符设备文件</p>
</li>
<li>
<p><code>s</code>: 套接口文件/数据接口文件</p>
<p><em>后四种是特殊文件</em></p>
</li>
</ul>
<h2 id="文件权限对应关系">文件权限对应关系</h2>
<table>
<thead>
<tr>
<th>权限</th>
<th>含义</th>
<th>对应数字</th>
</tr>
</thead>
<tbody>
<tr>
<td>r</td>
<td>读权限</td>
<td>4</td>
</tr>
<tr>
<td>w</td>
<td>写权限</td>
<td>2</td>
</tr>
<tr>
<td>x</td>
<td>执行权限</td>
<td>1</td>
</tr>
</tbody>
</table>
<p>读、写、运行三项权限用数字表示就是 <strong>r=4,w=2,x=1</strong>。所以，<code>-rw-r--r--</code> 用数字表示成 644。</p>
<p>权限字段 <code>-rwxrwxrwx</code> 的内容总共会有 10 个 <code>-</code>，第一个表示文件类型，如该文件是<strong>文件 (-表示）</strong>，<strong>文件夹 (d 表示）</strong>, <strong>连接文件 (l 表示）</strong>，后面 9 个按照每三位为一组分。</p>
<div class="highlight" id="id-2"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">drwxr-xr-x   <span class="m">5</span> liruihao  staff   160B Jul <span class="m">29</span> 17:48 file-share</span></span></code></pre></td></tr></table>
</div>
</div><p><strong>d</strong>: 代表文件夹</p>
<p><strong>rwx</strong>: 代表文件所有者 (u 表示）权限，这里是 liruihao，liruihao 对该文件拥有读写执行权限。</p>
<p><strong>r-x</strong>: 代表所属（g 表示）的权限，这里同组用户拥有对该文件读和执行的权限。</p>
<p><strong>r-x</strong>: 代表其他用户（o 表示）的权限，这里和上面权限一样。</p>]]></description></item><item><title>Sublime Text3 快捷键大全</title><link>https://lruihao.cn/posts/sublime-text3/</link><pubDate>Thu, 15 Aug 2019 20:59:10 +0000</pubDate><author>Lruihao</author><guid>https://lruihao.cn/posts/sublime-text3/</guid><description><![CDATA[<p>Sublime Text3 快捷键一览表</p>
<h2 id="tab-转-space">tab 转 space</h2>
<p>打开 Settings, 加入几行配置</p>
<div class="highlight" id="id-1"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-diff" data-lang="diff"><span class="line"><span class="cl">{
</span></span><span class="line"><span class="cl">  &#34;color_scheme&#34;: &#34;Packages/Color Scheme - Default/Monokai.sublime-color-scheme&#34;,
</span></span><span class="line"><span class="cl">  &#34;font_size&#34;: 14,
</span></span><span class="line"><span class="cl">  &#34;ignored_packages&#34;:
</span></span><span class="line"><span class="cl">  [
</span></span><span class="line"><span class="cl">    &#34;Vintage&#34;
</span></span><span class="line"><span class="cl">  ],
</span></span><span class="line"><span class="cl">  &#34;theme&#34;: &#34;Adaptive.sublime-theme&#34;,
</span></span><span class="line"><span class="cl"><span class="gi">+  &#34;expand_tabs_on_save&#34;: true,
</span></span></span><span class="line"><span class="cl"><span class="gi">+  &#34;tab_size&#34;: 2,
</span></span></span><span class="line"><span class="cl"><span class="gi">+  &#34;translate_tabs_to_spaces&#34;: true
</span></span></span><span class="line"><span class="cl"><span class="gi"></span>}
</span></span></code></pre></td></tr></table>
</div>
</div><h2 id="选择类">选择类</h2>
<ul>
<li>Ctrl+D 选中光标所占的文本，继续操作则会选中下一个相同的文本。</li>
<li>Alt+F3 选中文本按下快捷键，即可一次性选择全部的相同文本进行同时编辑。举个栗子：快速选中并更改所有相同的变量名、函数名等。</li>
<li>Ctrl+L 选中整行，继续操作则继续选择下一行，效果和 Shift+↓ 效果一样。</li>
<li>Ctrl+Shift+L 先选中多行，再按下快捷键，会在每行行尾插入光标，即可同时编辑这些行。</li>
<li>Ctrl+Shift+M 选择括号内的内容（继续选择父括号）。举个栗子：快速选中删除函数中的代码，重写函数体代码或重写括号内里的内容。</li>
<li>Ctrl+M 光标移动至括号内结束或开始的位置。</li>
<li>Ctrl+Enter 在下一行插入新行。举个栗子：即使光标不在行尾，也能快速向下插入一行。</li>
<li>Ctrl+Shift+Enter 在上一行插入新行。举个栗子：即使光标不在行首，也能快速向上插入一行。</li>
<li>Ctrl+Shift+[ 选中代码，按下快捷键，折叠代码。</li>
<li>Ctrl+Shift+] 选中代码，按下快捷键，展开代码。</li>
<li>Ctrl+K+0 展开所有折叠代码。</li>
<li>Ctrl+← 向左单位性地移动光标，快速移动光标。</li>
<li>Ctrl+→ 向右单位性地移动光标，快速移动光标。</li>
<li>shift+↑ 向上选中多行。</li>
<li>shift+↓ 向下选中多行。</li>
<li>Shift+← 向左选中文本。</li>
<li>Shift+→ 向右选中文本。</li>
<li>Ctrl+Shift+← 向左单位性地选中文本。</li>
<li>Ctrl+Shift+→ 向右单位性地选中文本。</li>
<li>Ctrl+Shift+↑ 将光标所在行和上一行代码互换（将光标所在行插入到上一行之前）。</li>
<li>Ctrl+Shift+↓ 将光标所在行和下一行代码互换（将光标所在行插入到下一行之后）。</li>
<li>Ctrl+Alt+↑ 向上添加多行光标，可同时编辑多行。</li>
<li>Ctrl+Alt+↓ 向下添加多行光标，可同时编辑多行。</li>
</ul>
<h2 id="编辑类">编辑类</h2>
<ul>
<li>Ctrl+J 合并选中的多行代码为一行。举个栗子：将多行格式的 CSS 属性合并为一行。</li>
<li>Ctrl+Shift+D 复制光标所在整行，插入到下一行。</li>
<li>Tab 向右缩进。</li>
<li>Shift+Tab 向左缩进。</li>
<li>Ctrl+K+K 从光标处开始删除代码至行尾。</li>
<li>Ctrl+Shift+K 删除整行。</li>
<li>Ctrl+/ 注释单行。</li>
<li>Ctrl+Shift+/ 注释多行。</li>
<li>Ctrl+K+U 转换大写。</li>
<li>Ctrl+K+L 转换小写。</li>
<li>Ctrl+Z 撤销。</li>
<li>Ctrl+Y 恢复撤销。</li>
<li>Ctrl+U 软撤销，感觉和 Gtrl+Z 一样。</li>
<li>Ctrl+F2 设置书签</li>
<li>Ctrl+T 左右字母互换。</li>
<li>F6 单词检测拼写</li>
</ul>
<h2 id="搜索类">搜索类</h2>
<ul>
<li>Ctrl+F 打开底部搜索框，查找关键字。</li>
<li>Ctrl+shift+F 在文件夹内查找，与普通编辑器不同的地方是 sublime 允许添加多个文件夹进行查找，略高端，未研究。</li>
<li>Ctrl+P 打开搜索框。举个栗子：1、输入当前项目中的文件名，快速搜索文件，2、输入@和关键字，查找文件中函数名，3、输入：和数字，跳转到文件中该行代码，4、输入#和关键字，查找变量名。</li>
<li>Ctrl+G 打开搜索框，自动带：，输入数字跳转到该行代码。举个栗子：在页面代码比较长的文件中快速定位。</li>
<li>Ctrl+R 打开搜索框，自动带@，输入关键字，查找文件中的函数名。举个栗子：在函数较多的页面快速查找某个函数。</li>
<li>Ctrl+： 打开搜索框，自动带#，输入关键字，查找文件中的变量名、属性名等。</li>
<li>Ctrl+Shift+P 打开命令框。场景栗子：打开命名框，输入关键字，调用 sublime text 或插件的功能，例如使用 package 安装插件。</li>
<li>Esc 退出光标多行选择，退出搜索框，命令框等。</li>
</ul>
<h2 id="显示类">显示类</h2>
<ul>
<li>Ctrl+Tab 按文件浏览过的顺序，切换当前窗口的标签页。</li>
<li>Ctrl+PageDown 向左切换当前窗口的标签页。</li>
<li>Ctrl+PageUp 向右切换当前窗口的标签页。</li>
<li>Alt+Shift+1 窗口分屏，恢复默认 1 屏（非小键盘的数字）</li>
<li>Alt+Shift+2 左右分屏-2 列</li>
<li>Alt+Shift+3 左右分屏-3 列</li>
<li>Alt+Shift+4 左右分屏-4 列</li>
<li>Alt+Shift+5 等分 4 屏</li>
<li>Alt+Shift+8 垂直分屏-2 屏</li>
<li>Alt+Shift+9 垂直分屏-3 屏</li>
<li>Ctrl+K+B 开启/关闭侧边栏。</li>
<li>F11 全屏模式</li>
<li>Shift+F11 免打扰模式</li>
</ul>]]></description></item><item><title>条件注释判断浏览器版本&lt;!--[if lt IE 9]>;</title><link>https://lruihao.cn/posts/ifzhushi/</link><pubDate>Fri, 10 May 2019 13:08:27 +0000</pubDate><author>Lruihao</author><guid>https://lruihao.cn/posts/ifzhushi/</guid><description><![CDATA[<blockquote>
<p><span>&lt;!--[if !IE]&gt;&lt;!--&gt; 除 IE 外都可识别 &lt;!--&lt;![endif]--&gt;</span><br><span>&lt;!--[if IE]&gt; 所有的 IE 可识别 &lt;![endif]--&gt;</span><br><span>&lt;!--[if IE 6]&gt; 仅 IE6 可识别 &lt;![endif]--&gt;</span><br><span>&lt;!--[if lt IE 6]&gt; IE6 以及 IE6 以下版本可识别 &lt;![endif]--&gt;</span><br><span>&lt;!--[if gte IE 6]&gt; IE6 以及 IE6 以上版本可识别 &lt;![endif]--&gt;</span><br><span>&lt;!--[if IE 7]&gt; 仅 IE7 可识别 &lt;![endif]--&gt;</span><br><span>&lt;!--[if lt IE 7]&gt; IE7 以及 IE7 以下版本可识别 &lt;![endif]--&gt;</span><br><span>&lt;!--[if gte IE 7]&gt; IE7 以及 IE7 以上版本可识别 &lt;![endif]--&gt;</span><br><span>&lt;!--[if IE 8]&gt; 仅 IE8 可识别 &lt;![endif]--&gt;</span><br><span>&lt;!--[if IE 9]&gt; 仅 IE9 可识别 &lt;![endif]--&gt;</span></p>
</blockquote>
<table align="center"> <tbody> <tr><th width="50">项目</th><th width="150">范例</th><th>说明</th></tr> <tr> <td align="middle">!</td><td>[if !IE]</td><td>The NOT operator. This is placed immediately in front of the&nbsp;<em>feature</em>,&nbsp;<em>operator</em>, or&nbsp;<em>subexpression</em>&nbsp;to reverse the Boolean meaning of the expression.<br />NOT 运算符。这是摆立即在前面的<em>功能</em>，<em>操作员</em>，或<em>子表达式</em>扭转布尔表达式的意义。</td></tr><tr><td align="middle">lt</td> <td>[if lt IE 5.5]</td> <td>The less-than operator. Returns true if the first argument is less than the second argument.<br />小于运算符。如果第一个参数小于第二个参数，则返回 true。</td> </tr><tr><td align="middle">lte</td><td>[if lte IE 6]</td><td>The less-than or equal operator. Returns true if the first argument is less than or equal to the second argument.<br />小于或等于运算。如果第一个参数是小于或等于第二个参数，则返回 true。</td> </tr><tr><td align="middle">gt</td><td>[if gt IE 5]</td><td>The greater-than operator. Returns true if the first argument is greater than the second argument.<br />大于运算符。如果第一个参数大于第二个参数，则返回 true。</td> </tr><tr><td align="middle">gte</td> <td>[if gte IE 7]</td><td>The greater-than or equal operator. Returns true if the first argument is greater than or equal to the second argument.<br />大于或等于运算。如果第一个参数是大于或等于第二个参数，则返回 true。</td> </tr><tr><td align="middle">( )</td><td>[if !(IE 7)]</td><td>Subexpression operators. Used in conjunction with boolean operators to create more complex expressions.<br />子表达式运营商。在与布尔运算符用于创建更复杂的表达式。</td></tr><tr><td align="middle">&amp;</td><td>[if (gt IE 5)&amp;(lt IE 7)]</td><td>The AND operator. Returns true if all subexpressions evaluate to true<br />AND 运算符。如果所有的子表达式计算结果为 true，返回 true</td></tr><tr><td align="middle">|</td><td>[if (IE 6)|(IE 7)]</td><td>The OR operator. Returns true if any of the subexpressions evaluates to true.<br />OR 运算符。返回 true，如果子表达式计算结果为 true。</td></tr></tbody></table>
<div class="highlight" id="id-1"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-xml" data-lang="xml"><span class="line"><span class="cl"><span class="c">&lt;!--[if lt IE 9]&gt;
</span></span></span><span class="line"><span class="cl"><span class="c">加载 CSS1
</span></span></span><span class="line"><span class="cl"><span class="c">&lt;!--[else]&gt;
</span></span></span><span class="line"><span class="cl"><span class="c">加载 CSS2
</span></span></span><span class="line"><span class="cl"><span class="c">&lt;![endif]--&gt;</span></span></span></code></pre></td></tr></table>
</div>
</div><p>这样有效是有效，但是用 HTML VALIDATOR 里，报错，因为这个不符合 XHTML 1.1 的规范，
如果把 ELSE 语句去掉，则正确。</p>
<div class="highlight" id="id-2"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-xml" data-lang="xml"><span class="line"><span class="cl">加载 CSS2
</span></span><span class="line"><span class="cl"><span class="c">&lt;!--[if lt IE 9]&gt;
</span></span></span><span class="line"><span class="cl"><span class="c">加载 CSS1（可以把要重写的写在这里）.
</span></span></span><span class="line"><span class="cl"><span class="c">&lt;![endif]--&gt;</span></span></span></code></pre></td></tr></table>
</div>
</div>]]></description></item><item><title>Python 如何操作 Json？</title><link>https://lruihao.cn/posts/jsoninfo/</link><pubDate>Tue, 07 May 2019 18:42:47 +0000</pubDate><author>Lruihao</author><guid>https://lruihao.cn/posts/jsoninfo/</guid><description><![CDATA[<div class="featured-image">
        <img src="/posts/jsoninfo/images/1.jpg" referrerpolicy="no-referrer">
      </div><blockquote>
<p>Json（JavaScript Object Notation）它是一种轻量级的数据交换格式，具有数据格式简单，读写方便易懂等很多优点。许多主流的编程语言都在用它来进行前后端的数据传输，大大的简化了服务器和客户端的开发工作量。相对于 XML 来说，更加的轻量级，更方便解析，因此许多开发者都遵循 Json 格式来进行数据的传输和交换。今天我们详细介绍一下 Python 在 Json 的编解码方面的知识。</p>
</blockquote>
<h2 id="json-的数据格式">json 的数据格式</h2>
<p>在 json 中，遵循“键值对”的这样一种方式，比如：“{&ldquo;name&rdquo;:&ldquo;tom&rdquo;}”, 就是一个 json 格式的数据，json 的格式归纳下来，一般有以下几点：</p>
<ul>
<li>对象通过键值对表现；</li>
<li>键通过双引号包裹，后面跟冒号“:”，然后跟该键的值；</li>
<li>值可以是字符串、数字、数组等数据类型；</li>
<li>对象与对象之间用逗号隔开；</li>
<li>“{}”用来表达对象；</li>
<li>“[]”用来表达数组；</li>
</ul>
<p>我们看一个略为复杂一点的例子：</p>
<p></p>
<p>上例则是一个典型的 json 格式的数据，强大的 Python 提供了一个“json”模块，可以方便的将各种零散的数据通过模块的内置函数编码形成一个 json 格式的数据，也可以将一个 json 格式的数据解码形成自己需要的数据，非常好用，下面我们就来介绍一下。</p>
<h2 id="jsondumps">json.dumps()</h2>
<p>json 模块里的 dumps 函数是对数据进行编码，形成 json 格式的数据，我们看一下下面的例子：</p>
<p></p>
<p>通过输出的结果很容易看出，通过 dumps 方法使字典转换成为了 json 格式，虽然它们非常相似。其中，在 dumps 里的参数“sort_keys=True”，使得输出 json 后对 key 和 value 进行 0~9、a~ z 的顺序排序，如果不填，则按照无序排列。有时候，通过排序可以方便地比较 json 中的数据，因此，适当的排序是很有必要的。</p>
<p>此外，“Indent”参数表示缩进的意思，它可以使得输出的 Json 看起来更加整齐好看，可读性更强，例如：</p>
<p></p>
<p>下面列举一下 dumps（）的可填参数：</p>
<ul>
<li>skipkey：默认为 False，当 dict 对象里的数据不是 Python 的基本数据类型；（str,unicode,int,long,float,bool,None）时，当 skipkey 为 False，就会报错，如果 skipkey 为 True，则可以跳过这类 key；</li>
<li>indent：如果填 0 或者不填，则按照一行进行打印，否则按照 indent 的数值显示前面的空格（正整数形式）；</li>
<li>separators：分隔符，默认为“(&rsquo;,&rsquo;,&rsquo;:&rsquo;)”，它表示 key 之间用“,”隔开，key 和 value 之间用“:”隔开；</li>
<li>encoding：编码格式，默认值是 UTF-8；</li>
<li>sort_keys：对 key、value 进行排序，默认值是 False，即不排序；</li>
<li>ensure_ascii：默认为 True，如果 dict 对象里含有 none-ASCII 的字符，则显示、uXX 的格式，如果为 False，则能正常显示出来；</li>
</ul>
<h2 id="jsonloads">json.loads()</h2>
<p>和 dumps 相反，loads 函数则是将 json 格式的数据解码，转换为 Python 字典，我们看一下下面的例子：</p>
<p></p>
<p>有时候，输出结果遇到中文的时候，会出现编码格式不一样的情况，显示出为 Unicode 的编码格式，使得不易读懂，解决办法是添加参数“encoding”参数，即上面的改写成这样：d1 = json.loads(data1,encoding=&lsquo;utf-8&rsquo;) 即可。</p>
<h2 id="jsondump-和-jsonload">json.dump() 和 json.load()</h2>
<p>相对于上面所讲的 dumps 和 loads 来说，dump 和 load 函数的功能类似，只不过前者是用来处理字符串类型的，而后者是用于处理文件类型的，如下所示：</p>
<p></p>
<p>上例列举出了 json 的四个方法：dumps（）和 dump（）、loads（）和 load（）的简单使用方法，可见，Python 对于 json 的处理相当方便，不像 c++那样（谁用谁知道）。</p>]]></description></item><item><title>python 玩微信：初探 wxpy</title><link>https://lruihao.cn/posts/wxpy1/</link><pubDate>Sat, 20 Apr 2019 15:44:57 +0000</pubDate><author>Lruihao</author><guid>https://lruihao.cn/posts/wxpy1/</guid><description><![CDATA[<div class="featured-image">
        <img src="/posts/wxpy1/images/1.png" referrerpolicy="no-referrer">
      </div><blockquote>
<p><strong><em>文中涉及的图片涉及个人隐私，仅做举例，请勿传播</em></strong></p>
<ul>
<li>查看微信好友男女比例</li>
<li>查看好友地区分布</li>
<li>群性别统计</li>
</ul>
</blockquote>
<h2 id="前期准备">前期准备</h2>
<ul>
<li><a href="https://github.com/youfou/wxpy"target="_blank" rel="external nofollow noopener noreferrer">wxpy<i class="fa-solid fa-external-link-alt fa-fw fa-xs ms-1 text-secondary" aria-hidden="true"></i></a></li>
<li><a href="https://github.com/pyecharts/pyecharts"target="_blank" rel="external nofollow noopener noreferrer">pyecharts<i class="fa-solid fa-external-link-alt fa-fw fa-xs ms-1 text-secondary" aria-hidden="true"></i></a>（百度 echarts）</li>
</ul>
<h2 id="查看微信好友男女比例">查看微信好友男女比例</h2>
<div class="highlight" id="id-1"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-py" data-lang="py"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">wxpy</span> <span class="kn">import</span> <span class="o">*</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">pyecharts</span> <span class="kn">import</span> <span class="n">Pie</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">bot</span> <span class="o">=</span> <span class="n">Bot</span><span class="p">(</span><span class="n">cache_path</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span>   <span class="c1">#定义一个微信机器人</span>
</span></span><span class="line"><span class="cl"><span class="n">friends</span> <span class="o">=</span> <span class="n">bot</span><span class="o">.</span><span class="n">friends</span><span class="p">(</span><span class="n">update</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>   <span class="c1">#获取更新好友列表</span>
</span></span><span class="line"><span class="cl"><span class="n">male</span> <span class="o">=</span> <span class="n">female</span> <span class="o">=</span> <span class="n">other</span> <span class="o">=</span> <span class="mi">0</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">friends</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>     <span class="c1">#[1:] 自己是第一个，排除掉</span>
</span></span><span class="line"><span class="cl">    <span class="n">sex</span> <span class="o">=</span> <span class="n">i</span><span class="o">.</span><span class="n">sex</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="n">sex</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">male</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">    <span class="k">elif</span> <span class="n">sex</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">female</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">    <span class="k">else</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">other</span> <span class="o">+=</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl"><span class="n">total</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">friends</span><span class="p">[</span><span class="mi">1</span><span class="p">:])</span>   <span class="c1">#计算总数</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#下面为分析</span>
</span></span><span class="line"><span class="cl"><span class="n">attr</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&#34;男性&#34;</span><span class="p">,</span><span class="s2">&#34;女性&#34;</span><span class="p">,</span><span class="s2">&#34;其他&#34;</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"><span class="n">v1</span> <span class="o">=</span> <span class="p">[</span><span class="nb">float</span><span class="p">(</span><span class="n">male</span><span class="p">),</span><span class="nb">float</span><span class="p">(</span><span class="n">female</span><span class="p">),</span><span class="nb">float</span><span class="p">(</span><span class="n">other</span><span class="p">)]</span>
</span></span><span class="line"><span class="cl"><span class="n">pie</span> <span class="o">=</span> <span class="n">Pie</span><span class="p">(</span><span class="s2">&#34;饼图-圆环图示例&#34;</span><span class="p">,</span> <span class="n">title_pos</span><span class="o">=</span><span class="s1">&#39;center&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">pie</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">&#34;&#34;</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">v1</span><span class="p">,</span> <span class="n">radius</span><span class="o">=</span><span class="p">[</span><span class="mi">40</span><span class="p">,</span> <span class="mi">75</span><span class="p">],</span> <span class="n">label_text_color</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">is_label_show</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="n">legend_orient</span><span class="o">=</span><span class="s1">&#39;vertical&#39;</span><span class="p">,</span> <span class="n">legend_pos</span><span class="o">=</span><span class="s1">&#39;left&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">pie</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="s2">&#34;sex.html&#34;</span><span class="p">)</span></span></span></code></pre></td></tr></table>
</div>
</div><p></p>
<h2 id="查看好友地区分布">查看好友地区分布</h2>
<div class="highlight" id="id-2"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-py" data-lang="py"><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">wxpy</span> <span class="kn">import</span> <span class="o">*</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">pyecharts</span> <span class="kn">import</span> <span class="n">Map</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#因为获取的列表城市都没有带市字，而 pyecharts 需要带个市字</span>
</span></span><span class="line"><span class="cl"><span class="n">b</span> <span class="o">=</span> <span class="s1">&#39;市&#39;</span>
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">s</span><span class="p">(</span><span class="n">x</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">x</span><span class="o">+</span><span class="n">b</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#只提取湖南的</span>
</span></span><span class="line"><span class="cl"><span class="n">bot</span> <span class="o">=</span> <span class="n">Bot</span><span class="p">(</span><span class="n">cache_path</span> <span class="o">=</span> <span class="kc">True</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">friends</span> <span class="o">=</span> <span class="n">bot</span><span class="o">.</span><span class="n">friends</span><span class="p">(</span><span class="n">update</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">province</span> <span class="o">=</span> <span class="s1">&#39;湖南&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">citys</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">f</span> <span class="ow">in</span> <span class="n">friends</span> <span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">city</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">city</span>
</span></span><span class="line"><span class="cl">    <span class="n">citys</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">city</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">r</span> <span class="o">=</span> <span class="nb">map</span><span class="p">(</span><span class="n">s</span><span class="p">,</span><span class="n">citys</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">cityss</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">r</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#为城市计数</span>
</span></span><span class="line"><span class="cl"><span class="n">a</span> <span class="o">=</span> <span class="p">{}</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">cityss</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="n">a</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">cityss</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">a</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s1">&#39;市&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">#把字典进行有序拆分为 2 个列表</span>
</span></span><span class="line"><span class="cl"><span class="n">attrs</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="cl"><span class="n">values</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">value</span><span class="p">,</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">a</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
</span></span><span class="line"><span class="cl">    <span class="n">values</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">attrs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="c1">#开始绘图</span>
</span></span><span class="line"><span class="cl"><span class="nb">map</span> <span class="o">=</span> <span class="n">Map</span><span class="p">(</span><span class="s2">&#34;湖南地图示例&#34;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mi">1200</span><span class="p">,</span> <span class="n">height</span><span class="o">=</span><span class="mi">600</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">map</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">&#34;&#34;</span><span class="p">,</span> <span class="n">attrs</span><span class="p">,</span> <span class="n">values</span><span class="p">,</span> <span class="n">maptype</span><span class="o">=</span><span class="s1">&#39;湖南&#39;</span><span class="p">,</span> <span class="n">is_visualmap</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">visual_text_color</span><span class="o">=</span><span class="s1">&#39;#000&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nb">map</span><span class="o">.</span><span class="n">render</span><span class="p">(</span><span class="s2">&#34;city.html&#34;</span><span class="p">)</span></span></span></code></pre></td></tr></table>
</div>
</div><p></p>
<blockquote>
<p><strong>以上参考简书 <a href="https://www.jianshu.com/p/c0baf3c6db15"target="_blank" rel="external nofollow noopener noreferrer">陈思煜<i class="fa-solid fa-external-link-alt fa-fw fa-xs ms-1 text-secondary" aria-hidden="true"></i></a></strong></p>
</blockquote>
<h2 id="统计所有群男女数目">统计所有群男女数目</h2>
<blockquote>
<p>统计结果会自动发送到所有群聊
男女人数和不一定等于总数（有些人不显示性别）</p>
</blockquote>
<div class="highlight" id="id-3"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span><span class="lnt">37
</span><span class="lnt">38
</span><span class="lnt">39
</span><span class="lnt">40
</span><span class="lnt">41
</span><span class="lnt">42
</span><span class="lnt">43
</span><span class="lnt">44
</span><span class="lnt">45
</span><span class="lnt">46
</span><span class="lnt">47
</span><span class="lnt">48
</span><span class="lnt">49
</span><span class="lnt">50
</span><span class="lnt">51
</span><span class="lnt">52
</span><span class="lnt">53
</span><span class="lnt">54
</span><span class="lnt">55
</span><span class="lnt">56
</span><span class="lnt">57
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-py" data-lang="py"><span class="line"><span class="cl"><span class="c1">#encoding=utf-8</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">wxpy</span> <span class="kn">import</span> <span class="o">*</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">numpy</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">removeAll</span><span class="p">(</span><span class="n">the_list</span><span class="p">,</span> <span class="n">val</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="p">[</span><span class="n">value</span> <span class="k">for</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">the_list</span> <span class="k">if</span> <span class="n">value</span> <span class="o">!=</span> <span class="n">val</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">stats_text</span><span class="p">(</span><span class="n">target_group</span><span class="p">,</span> <span class="n">group_name</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="n">group_name</span> <span class="o">+</span> <span class="s2">&#34;群共有：&#34;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">target_group</span><span class="p">))</span> <span class="o">+</span> <span class="s2">&#34;人，其中：&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">all_stats_text</span> <span class="o">=</span> <span class="p">[]</span>
</span></span><span class="line"><span class="cl">    <span class="n">all_dict</span> <span class="o">=</span> <span class="p">{}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="c1">## 乱序先整理一份省份 + 地点的列表</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">user</span> <span class="ow">in</span> <span class="n">target_group</span><span class="o">.</span><span class="n">members</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="n">trimed_data</span> <span class="o">=</span> <span class="n">user</span><span class="o">.</span><span class="n">province</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span> <span class="o">+</span> <span class="n">user</span><span class="o">.</span><span class="n">city</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="n">trimed_data</span> <span class="o">!=</span> <span class="s1">&#39;&#39;</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="n">all_stats_text</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">trimed_data</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="c1">## 计数</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">data</span> <span class="ow">in</span> <span class="n">all_stats_text</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="n">all_stats_text</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="n">data</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="n">all_dict</span><span class="p">[</span><span class="n">data</span><span class="p">]</span> <span class="o">=</span> <span class="n">all_stats_text</span><span class="o">.</span><span class="n">count</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="n">all_stats_text</span> <span class="o">=</span> <span class="n">removeAll</span><span class="p">(</span><span class="n">all_stats_text</span><span class="p">,</span> <span class="n">data</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">final_dict</span> <span class="o">=</span> <span class="p">{}</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">all_dict</span><span class="o">.</span><span class="n">keys</span><span class="p">()):</span>
</span></span><span class="line"><span class="cl">        <span class="n">final_dict</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">all_dict</span><span class="p">[</span><span class="n">i</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">final_dict</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">def</span> <span class="nf">stats_sex</span><span class="p">(</span><span class="n">target_group</span><span class="p">):</span>
</span></span><span class="line"><span class="cl">    <span class="n">male</span> <span class="o">=</span> <span class="mi">0</span>
</span></span><span class="line"><span class="cl">    <span class="n">female</span> <span class="o">=</span> <span class="mi">0</span>
</span></span><span class="line"><span class="cl">    <span class="n">other</span> <span class="o">=</span> <span class="mi">0</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="k">for</span> <span class="n">user</span> <span class="ow">in</span> <span class="n">target_group</span><span class="o">.</span><span class="n">members</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="n">user</span><span class="o">.</span><span class="n">sex</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="n">male</span> <span class="o">=</span> <span class="n">male</span> <span class="o">+</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="n">user</span><span class="o">.</span><span class="n">sex</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="n">female</span> <span class="o">=</span> <span class="n">female</span> <span class="o">+</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">        <span class="k">else</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">            <span class="n">other</span> <span class="o">=</span> <span class="n">other</span> <span class="o">+</span> <span class="mi">1</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;男的有：&#34;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">male</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&#34;人&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="s2">&#34;女的有：&#34;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">female</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&#34;人&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">msg</span> <span class="o">=</span> <span class="s2">&#34;男的有：&#34;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">male</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&#34;人、n&#34;</span> <span class="o">+</span> <span class="s2">&#34;女的有：&#34;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">female</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&#34;人、n&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">msg</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">bot</span> <span class="o">=</span> <span class="n">Bot</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">target_group</span> <span class="o">=</span> <span class="n">bot</span><span class="o">.</span><span class="n">groups</span><span class="p">(</span><span class="n">update</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">contact_only</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">curr_group</span> <span class="ow">in</span> <span class="n">target_group</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">    <span class="c1">## 小于 10 人的群过滤掉</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">curr_group</span><span class="p">)</span> <span class="o">&lt;</span> <span class="mi">10</span><span class="p">:</span>
</span></span><span class="line"><span class="cl">        <span class="k">continue</span>
</span></span><span class="line"><span class="cl">    <span class="n">curr_group</span><span class="o">.</span><span class="n">update_group</span><span class="p">(</span><span class="n">members_details</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="nb">print</span><span class="p">(</span><span class="n">curr_group</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&#34;一共有：&#34;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">curr_group</span><span class="p">))</span> <span class="o">+</span> <span class="s2">&#34;人、n&#34;</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">msg</span> <span class="o">=</span> <span class="n">stats_sex</span><span class="p">(</span><span class="n">curr_group</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="n">curr_group</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">curr_group</span><span class="o">.</span><span class="n">name</span> <span class="o">+</span> <span class="s2">&#34;群，一共有：&#34;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">curr_group</span><span class="p">))</span> <span class="o">+</span> <span class="s2">&#34;人、n&#34;</span> <span class="o">+</span> <span class="n">msg</span><span class="p">)</span></span></span></code></pre></td></tr></table>
</div>
</div>]]></description></item><item><title>还乡</title><link>https://lruihao.cn/posts/renative/</link><pubDate>Fri, 01 Feb 2019 20:44:40 +0000</pubDate><author>Lruihao</author><guid>https://lruihao.cn/posts/renative/</guid><description><![CDATA[<blockquote>
<p>这不是英国作家哈代的《The Return of Native》, 而是我们这辈的父母所经历的常态。</p>
</blockquote>
<p>逢近年关，邻居家的王婶又在等她的儿子了。</p>
<p>她的儿子大抵有五年未曾回家了。记得去年，他同王婶说好了回家过年，王婶便从腊月二十直直地等到腊月三十，准备好一桌的年夜饭，最后却只是她一个人随便地扒拉了几口。</p>
<p>我尚且还记得那日，王婶与我母亲一同去河边处理鸡鸭，我也随了去。母亲同王婶说：“源子怎地还不回来？”王婶道：“许是买的车票晚了些，他早前和我说回家过年的，想来还在回来的路上。”</p>
<p>到晚上，万家灯火渐起，都说热热闹闹团圆饭，王婶家却格外冷清。王婶嫁过来时，家中便只有王叔一人，早些年，王叔随人去炸山取石，人也不幸被石头砸死，家中便只有王婶和她儿子二人。王源也知家中境况，自大学毕业后在外工作，至今，除了前年我暑假时回来过一次，其中便从未回来过。<br>
人倒是挺奋进，这些年，王婶家从小木屋变成了三层小洋房，家里也添置了许多家具和电器。王婶倒像一个门卫，守着这栋房子，看着这个家。</p>
<p>不过别家事总归别家事。</p>
<p>王婶是个十分随和的人，也常常和村里人打趣逗乐，常见她笑眼眯眯。一年到头，也唯有这“头”让她难展笑颜。<br>
“王婶子，源哥还没回来吗？”<br>
“快了，快了……”<br>
王婶又坐在门口，纳着新鞋，常常一纳就是一天。</p>
<p>我们常听到一个词——衣锦还乡，其实，于父母而言，他们所看重的从来都只是还乡。而所谓衣锦，不过是死要面子者拿来的托辞。衣锦若无，无便无罢，衣锦若有，有便有罢。<br>
衣锦随意，还乡就好。</p>
<p><em>戊戌年腊月廿七于家中。</em></p>]]></description></item><item><title>js 判断用户设备类型及平台</title><link>https://lruihao.cn/posts/js-device/</link><pubDate>Sat, 03 Nov 2018 23:35:44 +0000</pubDate><author>Lruihao</author><guid>https://lruihao.cn/posts/js-device/</guid><description><![CDATA[<p>前端开发经常遇到需要判断用户的浏览设备，是 pc 端还是移动端，移动端使用的是什么手机系统？android、ios、ipad、windows phone 等等，有时候还需要知道用户浏览页面是在微信中打开还是在移动端浏览器中打开，等等一系列判断做一些相应的处理。</p>
<h3 id="首先判断-pc-端还是移动端">首先判断 pc 端还是移动端</h3>
<div class="highlight" id="id-1"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">function IsPC() {
</span></span><span class="line"><span class="cl">        var userAgentInfo = navigator.userAgent;
</span></span><span class="line"><span class="cl">        var Agents = [&#34;Android&#34;, &#34;iPhone&#34;,
</span></span><span class="line"><span class="cl">                    &#34;SymbianOS&#34;, &#34;Windows Phone&#34;,
</span></span><span class="line"><span class="cl">                    &#34;iPad&#34;, &#34;iPod&#34;];
</span></span><span class="line"><span class="cl">        var flag = true;
</span></span><span class="line"><span class="cl">        for (var v = 0; v &lt; Agents.length; v++) {
</span></span><span class="line"><span class="cl">            if (userAgentInfo.indexOf(Agents[v]) &gt; 0) {
</span></span><span class="line"><span class="cl">                flag = false;
</span></span><span class="line"><span class="cl">                break;
</span></span><span class="line"><span class="cl">            }
</span></span><span class="line"><span class="cl">        }
</span></span><span class="line"><span class="cl">        return flag;
</span></span><span class="line"><span class="cl">    }</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="判断用户移动端使用的系统平台">判断用户移动端使用的系统平台</h3>
<div class="highlight" id="id-2"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">var u = navigator.userAgent;
</span></span><span class="line"><span class="cl">    if (u.indexOf(&#39;Android&#39;) &gt; -1 || u.indexOf(&#39;Linux&#39;) &gt; -1) {
</span></span><span class="line"><span class="cl">        //安卓手机
</span></span><span class="line"><span class="cl">    } else if (u.indexOf(&#39;iPhone&#39;) &gt; -1) {
</span></span><span class="line"><span class="cl">        //苹果手机
</span></span><span class="line"><span class="cl">    } else if (u.indexOf(&#39;Windows Phone&#39;) &gt; -1) {
</span></span><span class="line"><span class="cl">        //winphone 手机
</span></span><span class="line"><span class="cl">    }</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="判断用户是否在微信中打开">判断用户是否在微信中打开</h3>
<div class="highlight" id="id-3"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">function isWeiXin(){
</span></span><span class="line"><span class="cl">        var ua = navigator.userAgent.toLowerCase();
</span></span><span class="line"><span class="cl">        if(ua.indexOf(&#39;micromessenger&#39;) != -1) {
</span></span><span class="line"><span class="cl">            return true;
</span></span><span class="line"><span class="cl">        } else {
</span></span><span class="line"><span class="cl">            return false;
</span></span><span class="line"><span class="cl">        }
</span></span><span class="line"><span class="cl">    }</span></span></code></pre></td></tr></table>
</div>
</div><h3 id="实际运用">实际运用</h3>
<p>根据 pc 或者移动端控制飘花数目，降低 cpu 消耗，减少卡顿。<a href="https://www.lruihao.cn"target="_blank" rel="external nofollow noopener noreferrer">demo<i class="fa-solid fa-external-link-alt fa-fw fa-xs ms-1 text-secondary" aria-hidden="true"></i></a></p>
<div class="highlight" id="id-4"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">  &lt;script&gt;
</span></span><span class="line"><span class="cl">    function sakuraInit() {
</span></span><span class="line"><span class="cl">        $(document).snowfall(&#39;clear&#39;);
</span></span><span class="line"><span class="cl">        var userAgentInfo = navigator.userAgent;
</span></span><span class="line"><span class="cl">        var Agents = [&#34;Android&#34;, &#34;iPhone&#34;,
</span></span><span class="line"><span class="cl">                    &#34;SymbianOS&#34;, &#34;Windows Phone&#34;,
</span></span><span class="line"><span class="cl">                    &#34;iPad&#34;, &#34;iPod&#34;];
</span></span><span class="line"><span class="cl">        var flag = true;
</span></span><span class="line"><span class="cl">        for (var v = 0; v &lt; Agents.length; v++) {
</span></span><span class="line"><span class="cl">            if (userAgentInfo.indexOf(Agents[v]) &gt; 0) {
</span></span><span class="line"><span class="cl">                flag = false;
</span></span><span class="line"><span class="cl">                break;
</span></span><span class="line"><span class="cl">            }
</span></span><span class="line"><span class="cl">        }
</span></span><span class="line"><span class="cl">        if (flag) {
</span></span><span class="line"><span class="cl">            $(document).snowfall({image:&#34;images/1.png&#34;, flakeCount:5, minSpeed:1, minSize:8, maxSize:15,});
</span></span><span class="line"><span class="cl">            $(document).snowfall({image:&#34;images/2.png&#34;, flakeCount:5, minSpeed:1, minSize:8, maxSize:15,});
</span></span><span class="line"><span class="cl">            $(document).snowfall({image:&#34;images/3.png&#34;, flakeCount:5, minSpeed:1, minSize:8, maxSize:15,});
</span></span><span class="line"><span class="cl">            $(document).snowfall({image:&#34;images/4.png&#34;, flakeCount:5, minSpeed:1, minSize:8, maxSize:15,});
</span></span><span class="line"><span class="cl">        } else {
</span></span><span class="line"><span class="cl">            $(document).snowfall({image:&#34;images/1.png&#34;, flakeCount:2, minSpeed:1, minSize:8, maxSize:15,});
</span></span><span class="line"><span class="cl">            $(document).snowfall({image:&#34;images/2.png&#34;, flakeCount:2, minSpeed:1, minSize:8, maxSize:15,});
</span></span><span class="line"><span class="cl">            $(document).snowfall({image:&#34;images/3.png&#34;, flakeCount:2, minSpeed:1, minSize:8, maxSize:15,});
</span></span><span class="line"><span class="cl">            $(document).snowfall({image:&#34;images/4.png&#34;, flakeCount:2, minSpeed:1, minSize:8, maxSize:15,});
</span></span><span class="line"><span class="cl">        }
</span></span><span class="line"><span class="cl">    }
</span></span><span class="line"><span class="cl">    window.onload = sakuraInit();
</span></span><span class="line"><span class="cl">  &lt;/script&gt;</span></span></code></pre></td></tr></table>
</div>
</div>]]></description></item><item><title>云服务器 CentOS 系统搭建 web 服务</title><link>https://lruihao.cn/posts/web-server-yun/</link><pubDate>Mon, 29 Oct 2018 09:15:58 +0000</pubDate><author>Lruihao</author><guid>https://lruihao.cn/posts/web-server-yun/</guid><description><![CDATA[<h3 id="搭建-apache-web-服务">搭建 Apache web 服务</h3>
<ol>
<li>安装 Apache 超文本传输协议 (HTTP) 服务器的主程序</li>
</ol>
<div class="highlight" id="id-1"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">[root@VM_0_6_centos /]# yum install -y httpd</span></span></code></pre></td></tr></table>
</div>
</div><p>注意安装目录，可通过 cd 命令切换。</p>
<ol start="2">
<li>启动 HTTP 服务</li>
</ol>
<div class="highlight" id="id-2"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">[root@VM_0_6_centos /]# systemctl start httpd.service</span></span></code></pre></td></tr></table>
</div>
</div><p>如果启动失败，可通过 systemctl status httpd.service 查看错误原因。<br>
启动成功，证明 http 服务已经可以使用，发现还需要把本地文件传到服务器。<br>
默认根目录<code>/var/www/html/</code></p>
<h3 id="使用-ssh-连接服务器">使用 SSH 连接服务器</h3>
<p>尝试了两种方式：PuTTY 和 Xshell（推荐）</p>
<h4 id="xshell-方式">Xshell 方式</h4>
<p>官网下载安装 Xshell 打开，输入 ip 账号密码连接主机。</p>
<p>使用 lrzsz 方式上传下载文件<br>
步骤 1：在服务器安装 lrzsz</p>
<div class="highlight" id="id-3"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">[root@VM_0_6_centos /]# yum -y install lrzsz</span></span></code></pre></td></tr></table>
</div>
</div><p>步骤 2：输入命令<code>rz</code>打开上传窗口（可以选择多个文件。)<br>
使用<code>sz</code>文件名命令可打开从服务器下载文件的保存窗口。</p>
<h3 id="修改-http-配置">修改 HTTP 配置</h3>
<p>1.VIM 编辑器打开配置文件</p>
<div class="highlight" id="id-4"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">[root@VM_0_6_centos /]# vim /etc/httpd/conf/httpd.conf</span></span></code></pre></td></tr></table>
</div>
</div><ol start="2">
<li>
<p>按<code>I</code>键进入编辑模式</p>
</li>
<li>
<p>找到并修改以下内容</p>
</li>
</ol>
<div class="highlight" id="id-5"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">ServerAdmin 管理员邮箱，用于浏览器请求报错时展示
</span></span><span class="line"><span class="cl">DocumentRoot 访问根目录（默认：/var/www/html），如项目存放在其他地方，可修改为项目存放位置
</span></span><span class="line"><span class="cl">&lt;Directory &#34;/var/www/html&#34;&gt; 同 DocumentRoot 配置
</span></span><span class="line"><span class="cl">ServerName 服务器 IP 或 域名</span></span></code></pre></td></tr></table>
</div>
</div><ol start="4">
<li>
<p>按下 ESC 键输入<code>:wq</code>保存退出</p>
</li>
<li>
<p>重启服务<code>service httpd restart</code></p>
</li>
<li>
<p>打开浏览器，输入地址访问<br>
如：我的项目索引 html 路径为 <code>love/index.html</code>，输入<br>
<code>http://IP 地址或域名/love/index.html</code></p>
</li>
<li>
<p>访问不成功，先检查网络，再查看 http 服务是否开启，最后检查配置；<br>
访问成功，配置完成。</p>
</li>
</ol>
]]></description></item><item><title>使用 js 准确获取当前页面 url 网址信息及 301 重定向实战</title><link>https://lruihao.cn/posts/href-301/</link><pubDate>Sun, 28 Oct 2018 14:22:00 +0000</pubDate><author>Lruihao</author><guid>https://lruihao.cn/posts/href-301/</guid><description><![CDATA[<h3 id="获取链接转">获取链接（转）</h3>
<p><a href="https://www.cnblogs.com/zhabayi/p/6419938.html"target="_blank" rel="external nofollow noopener noreferrer">传送门<i class="fa-solid fa-external-link-alt fa-fw fa-xs ms-1 text-secondary" aria-hidden="true"></i></a><br>
在 WEB 开发中，时常会用到 javascript 来获取当前页面的 url 网址信息，在这里是我的一些获取 url 信息的小总结。</p>
<p>下面我们举例一个 URL，然后获得它的各个组成部分：<code>http://i.cnblogs.com/EditPosts.aspx?opt=1</code></p>
<h4 id="windowlocationhref设置或获取整个-url-为字符串">window.location.href（设置或获取整个 URL 为字符串）</h4>
<div class="highlight" id="id-1"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">var test = window.location.href;
</span></span><span class="line"><span class="cl">alert(test);</span></span></code></pre></td></tr></table>
</div>
</div><p>返回：<code>http://i.cnblogs.com/EditPosts.aspx?opt=1</code></p>
<h4 id="windowlocationprotocol设置或获取-url-的协议部分">window.location.protocol（设置或获取 URL 的协议部分）</h4>
<div class="highlight" id="id-2"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">var test = window.location.protocol;
</span></span><span class="line"><span class="cl">alert(test);</span></span></code></pre></td></tr></table>
</div>
</div><p>返回：<code>http:</code></p>
<h4 id="windowlocationhost设置或获取-url-的主机部分">window.location.host（设置或获取 URL 的主机部分）</h4>
<div class="highlight" id="id-3"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">var test = window.location.host;
</span></span><span class="line"><span class="cl">alert(test);</span></span></code></pre></td></tr></table>
</div>
</div><p>返回：<code>i.cnblogs.com</code></p>
<h4 id="windowlocationport设置或获取与-url-关联的端口号码">window.location.port（设置或获取与 URL 关联的端口号码）</h4>
<div class="highlight" id="id-4"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">var test = window.location.port;
</span></span><span class="line"><span class="cl">alert(test);</span></span></code></pre></td></tr></table>
</div>
</div><p>返回：空字符（如果采用默认的 80 端口 (update: 即使添加了：80)，那么返回值并不是默认的 80 而是空字符）</p>
<h4 id="windowlocationpathname设置或获取与-url-的路径部分就是文件地址">window.location.pathname（设置或获取与 URL 的路径部分（就是文件地址）)</h4>
<div class="highlight" id="id-5"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">var test = window.location.pathname;
</span></span><span class="line"><span class="cl">alert(test);</span></span></code></pre></td></tr></table>
</div>
</div><p>返回：<code>/EditPosts.aspx</code></p>
<h4 id="windowlocationsearch设置或获取-href-属性中跟在问号后面的部分">window.location.search（设置或获取 href 属性中跟在问号后面的部分）</h4>
<div class="highlight" id="id-6"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">var test = window.location.search;
</span></span><span class="line"><span class="cl">alert(test);</span></span></code></pre></td></tr></table>
</div>
</div><p>返回：<code>?opt=1</code></p>
<p>PS：获得查询（参数）部分，除了给动态语言赋值以外，我们同样可以给静态页面，并使用 javascript 来获得相信应的参数值。</p>
<h4 id="windowlocationhash设置或获取-href-属性中在井号后面的分段">window.location.hash（设置或获取 href 属性中在井号“#”后面的分段）</h4>
<div class="highlight" id="id-7"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">var test = window.location.hash;
</span></span><span class="line"><span class="cl">alert(test);</span></span></code></pre></td></tr></table>
</div>
</div><p>返回：空字符（因为 url 中没有）</p>
<h4 id="js-获取-url-中的参数值">js 获取 url 中的参数值</h4>
<h5 id="正则法">正则法</h5>
<div class="highlight" id="id-8"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-java" data-lang="java"><span class="line"><span class="cl"><span class="n">function</span> <span class="nf">getQueryString</span><span class="o">(</span><span class="n">name</span><span class="o">)</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">  <span class="n">var</span> <span class="n">reg</span> <span class="o">=</span> <span class="k">new</span> <span class="n">RegExp</span><span class="o">(</span><span class="err">&#39;</span><span class="o">(^|&amp;)</span><span class="err">&#39;</span> <span class="o">+</span> <span class="n">name</span> <span class="o">+</span> <span class="err">&#39;</span><span class="o">=([^&amp;]*)(&amp;|</span><span class="n">$</span><span class="o">)</span><span class="err">&#39;</span><span class="o">,</span> <span class="sc">&#39;i&#39;</span><span class="o">);</span>
</span></span><span class="line"><span class="cl">  <span class="n">var</span> <span class="n">r</span> <span class="o">=</span> <span class="n">window</span><span class="o">.</span><span class="na">location</span><span class="o">.</span><span class="na">search</span><span class="o">.</span><span class="na">substr</span><span class="o">(</span><span class="mi">1</span><span class="o">).</span><span class="na">match</span><span class="o">(</span><span class="n">reg</span><span class="o">);</span>
</span></span><span class="line"><span class="cl">  <span class="k">if</span> <span class="o">(</span><span class="n">r</span> <span class="o">!=</span> <span class="kc">null</span><span class="o">)</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">unescape</span><span class="o">(</span><span class="n">r</span><span class="o">[</span><span class="mi">2</span><span class="o">]);</span>
</span></span><span class="line"><span class="cl">  <span class="o">}</span>
</span></span><span class="line"><span class="cl">  <span class="k">return</span> <span class="kc">null</span><span class="o">;</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl"><span class="c1">// 这样调用：
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="n">alert</span><span class="o">(</span><span class="n">GetQueryString</span><span class="o">(</span><span class="s">&#34;参数名 1&#34;</span><span class="o">));</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">alert</span><span class="o">(</span><span class="n">GetQueryString</span><span class="o">(</span><span class="s">&#34;参数名 2&#34;</span><span class="o">));</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">alert</span><span class="o">(</span><span class="n">GetQueryString</span><span class="o">(</span><span class="s">&#34;参数名 3&#34;</span><span class="o">));</span></span></span></code></pre></td></tr></table>
</div>
</div><h5 id="split-拆分法">split 拆分法</h5>
<div class="highlight" id="id-9"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-java" data-lang="java"><span class="line"><span class="cl"><span class="n">function</span> <span class="nf">GetRequest</span><span class="o">()</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">  <span class="n">var</span> <span class="n">url</span> <span class="o">=</span> <span class="n">location</span><span class="o">.</span><span class="na">search</span><span class="o">;</span> <span class="c1">//获取 url 中&#34;?&#34;符后的字串
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>  <span class="n">var</span> <span class="n">theRequest</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Object</span><span class="o">();</span>
</span></span><span class="line"><span class="cl">  <span class="k">if</span> <span class="o">(</span><span class="n">url</span><span class="o">.</span><span class="na">indexOf</span><span class="o">(</span><span class="s">&#34;?&#34;</span><span class="o">)</span> <span class="o">!=</span> <span class="o">-</span><span class="mi">1</span><span class="o">)</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">var</span> <span class="n">str</span> <span class="o">=</span> <span class="n">url</span><span class="o">.</span><span class="na">substr</span><span class="o">(</span><span class="mi">1</span><span class="o">);</span>
</span></span><span class="line"><span class="cl">    <span class="n">strs</span> <span class="o">=</span> <span class="n">str</span><span class="o">.</span><span class="na">split</span><span class="o">(</span><span class="s">&#34;&amp;&#34;</span><span class="o">);</span>
</span></span><span class="line"><span class="cl">    <span class="k">for</span><span class="o">(</span><span class="n">var</span> <span class="n">i</span> <span class="o">=</span> <span class="mi">0</span><span class="o">;</span> <span class="n">i</span> <span class="o">&lt;</span> <span class="n">strs</span><span class="o">.</span><span class="na">length</span><span class="o">;</span> <span class="n">i</span> <span class="o">++)</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">      <span class="n">theRequest</span><span class="o">[</span><span class="n">strs</span><span class="o">[</span><span class="n">i</span><span class="o">].</span><span class="na">split</span><span class="o">(</span><span class="s">&#34;=&#34;</span><span class="o">)[</span><span class="mi">0</span><span class="o">]]</span> <span class="o">=</span> <span class="n">unescape</span><span class="o">(</span><span class="n">strs</span><span class="o">[</span><span class="n">i</span><span class="o">].</span><span class="na">split</span><span class="o">(</span><span class="s">&#34;=&#34;</span><span class="o">)[</span><span class="mi">1</span><span class="o">]);</span>
</span></span><span class="line"><span class="cl">    <span class="o">}</span>
</span></span><span class="line"><span class="cl">  <span class="o">}</span>
</span></span><span class="line"><span class="cl">  <span class="k">return</span> <span class="n">theRequest</span><span class="o">;</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl"><span class="n">var</span> <span class="n">Request</span> <span class="o">=</span> <span class="k">new</span> <span class="n">Object</span><span class="o">();</span>
</span></span><span class="line"><span class="cl"><span class="n">Request</span> <span class="o">=</span> <span class="n">GetRequest</span><span class="o">();&lt;</span><span class="n">br</span><span class="o">&gt;</span><span class="c1">// var id=Request[&#34;id&#34;];
</span></span></span><span class="line"><span class="cl"><span class="c1">// var 参数 1, 参数 2, 参数 3, 参数 N;
</span></span></span><span class="line"><span class="cl"><span class="c1">// 参数 1 = Request[&#39;参数 1&#39;];
</span></span></span><span class="line"><span class="cl"><span class="c1">// 参数 2 = Request[&#39;参数 2&#39;];
</span></span></span><span class="line"><span class="cl"><span class="c1">// 参数 3 = Request[&#39;参数 3&#39;];
</span></span></span><span class="line"><span class="cl"><span class="c1">// 参数 N = Request[&#39;参数 N&#39;];
</span></span></span></code></pre></td></tr></table>
</div>
</div><h5 id="指定取">指定取</h5>
<p>比如说一个 url：<code>http://i.cnblogs.com/?j=js</code>, 我们想得到参数 j 的值，可以通过以下函数调用。</p>
<div class="highlight" id="id-10"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-java" data-lang="java"><span class="line"><span class="cl"><span class="n">function</span> <span class="nf">GetQueryString</span><span class="o">(</span><span class="n">name</span><span class="o">)</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">  <span class="n">var</span> <span class="n">reg</span> <span class="o">=</span> <span class="k">new</span> <span class="n">RegExp</span><span class="o">(</span><span class="s">&#34;(^|&amp;)&#34;</span> <span class="o">+</span> <span class="n">name</span> <span class="o">+</span> <span class="s">&#34;=([^&amp;]*)(&amp;|$)&#34;</span><span class="o">,</span> <span class="s">&#34;i&#34;</span><span class="o">);</span>
</span></span><span class="line"><span class="cl">  <span class="n">var</span> <span class="n">r</span> <span class="o">=</span> <span class="n">window</span><span class="o">.</span><span class="na">location</span><span class="o">.</span><span class="na">search</span><span class="o">.</span><span class="na">substr</span><span class="o">(</span><span class="mi">1</span><span class="o">).</span><span class="na">match</span><span class="o">(</span><span class="n">reg</span><span class="o">);</span> <span class="c1">//获取 url 中&#34;?&#34;符后的字符串并正则匹配
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>  <span class="n">var</span> <span class="n">context</span> <span class="o">=</span> <span class="s">&#34;&#34;</span><span class="o">;</span>
</span></span><span class="line"><span class="cl">  <span class="k">if</span> <span class="o">(</span><span class="n">r</span> <span class="o">!=</span> <span class="kc">null</span><span class="o">)</span>
</span></span><span class="line"><span class="cl">     <span class="n">context</span> <span class="o">=</span> <span class="n">r</span><span class="o">[</span><span class="mi">2</span><span class="o">];</span>
</span></span><span class="line"><span class="cl">  <span class="n">reg</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">r</span> <span class="o">=</span> <span class="kc">null</span><span class="o">;</span>
</span></span><span class="line"><span class="cl">  <span class="k">return</span> <span class="n">context</span> <span class="o">==</span> <span class="kc">null</span> <span class="o">||</span> <span class="n">context</span> <span class="o">==</span> <span class="s">&#34;&#34;</span> <span class="o">||</span> <span class="n">context</span> <span class="o">==</span> <span class="s">&#34;undefined&#34;</span> <span class="o">?</span> <span class="s">&#34;&#34;</span> <span class="o">:</span> <span class="n">context</span><span class="o">;</span>
</span></span><span class="line"><span class="cl"><span class="o">}</span>
</span></span><span class="line"><span class="cl"><span class="n">alert</span><span class="o">(</span><span class="n">GetQueryString</span><span class="o">(</span><span class="s">&#34;j&#34;</span><span class="o">));</span></span></span></code></pre></td></tr></table>
</div>
</div><h3 id="301-重定向实践">301 重定向（实践）</h3>
<p>由于之前把 blog 和网站主页分开在两个仓库所以要想在 blog 中 menu 里跳转到站外链接就要做一些处理。以前一直百度不到。
其实想法早就有了，只要在 blog 首页或者网站首页检测到<code>https://lruihao.cn/home</code>这个链接，或者检测到 home 字段就自动跳转。想法很简单。可是对 js 真的一点都不了解，以前百度也找不到实际的效果案例。所以还是自己写吧！附上蹩脚代码。</p>
<div class="highlight" id="id-11"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-java" data-lang="java"><span class="line"><span class="cl"><span class="n">var</span> <span class="n">path</span> <span class="o">=</span> <span class="n">window</span><span class="o">.</span><span class="na">location</span><span class="o">.</span><span class="na">href</span><span class="o">;</span>
</span></span><span class="line"><span class="cl">    <span class="c1">//alert(path);
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="k">if</span> <span class="o">(</span><span class="n">path</span><span class="o">==</span><span class="err">&#39;</span><span class="n">https</span><span class="o">:</span><span class="c1">//lruihao.cn/home/&#39;) {
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>      <span class="n">window</span><span class="o">.</span><span class="na">location</span><span class="o">.</span><span class="na">replace</span><span class="o">(</span><span class="s">&#34;https://www.lruihao.cn&#34;</span><span class="o">);</span>
</span></span><span class="line"><span class="cl">    <span class="o">}</span></span></span></code></pre></td></tr></table>
</div>
</div><p>或者</p>
<div class="highlight" id="id-12"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-java" data-lang="java"><span class="line"><span class="cl"><span class="n">var</span> <span class="n">path</span> <span class="o">=</span> <span class="n">window</span><span class="o">.</span><span class="na">location</span><span class="o">.</span><span class="na">pathname</span><span class="o">;</span>
</span></span><span class="line"><span class="cl">    <span class="c1">//alert(path);
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>    <span class="k">if</span> <span class="o">(</span><span class="n">path</span><span class="o">==</span><span class="err">&#39;</span><span class="o">/</span><span class="n">home</span><span class="o">/</span><span class="err">&#39;</span><span class="o">)</span> <span class="o">{</span>
</span></span><span class="line"><span class="cl">      <span class="n">window</span><span class="o">.</span><span class="na">location</span><span class="o">.</span><span class="na">replace</span><span class="o">(</span><span class="s">&#34;https://www.lruihao.cn&#34;</span><span class="o">);</span>
</span></span><span class="line"><span class="cl">    <span class="o">}</span></span></span></code></pre></td></tr></table>
</div>
</div><p>http 强制重定向 https</p>
<div class="highlight" id="id-13"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-java" data-lang="java"><span class="line"><span class="cl"><span class="o">&lt;</span><span class="n">script</span><span class="o">&gt;</span>
</span></span><span class="line"><span class="cl">  <span class="n">var</span> <span class="n">targetProtocol</span> <span class="o">=</span> <span class="s">&#34;https:&#34;</span><span class="o">;</span>
</span></span><span class="line"><span class="cl">  <span class="n">var</span> <span class="n">host</span> <span class="o">=</span> <span class="s">&#34;lruihao.cn&#34;</span><span class="o">;</span> <span class="c1">//域名判断，因为 localhost 仅支持 http
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>  <span class="k">if</span> <span class="o">(</span><span class="n">window</span><span class="o">.</span><span class="na">location</span><span class="o">.</span><span class="na">host</span> <span class="o">==</span> <span class="n">host</span> <span class="o">&amp;&amp;</span> <span class="n">window</span><span class="o">.</span><span class="na">location</span><span class="o">.</span><span class="na">protocol</span> <span class="o">!=</span> <span class="n">targetProtocol</span><span class="o">){</span>
</span></span><span class="line"><span class="cl">    <span class="n">window</span><span class="o">.</span><span class="na">location</span><span class="o">.</span><span class="na">href</span> <span class="o">=</span> <span class="n">targetProtocol</span> <span class="o">+</span>
</span></span><span class="line"><span class="cl">      <span class="n">window</span><span class="o">.</span><span class="na">location</span><span class="o">.</span><span class="na">href</span><span class="o">.</span><span class="na">substring</span><span class="o">(</span><span class="n">window</span><span class="o">.</span><span class="na">location</span><span class="o">.</span><span class="na">protocol</span><span class="o">.</span><span class="na">length</span><span class="o">);</span>
</span></span><span class="line"><span class="cl">    <span class="o">}</span>
</span></span><span class="line"><span class="cl"><span class="o">&lt;/</span><span class="n">script</span><span class="o">&gt;</span></span></span></code></pre></td></tr></table>
</div>
</div>]]></description></item><item><title>Vim 速查表</title><link>https://lruihao.cn/posts/vim/</link><pubDate>Fri, 31 Aug 2018 11:46:39 +0000</pubDate><author>Lruihao</author><guid>https://lruihao.cn/posts/vim/</guid><description><![CDATA[<p>Vim 速查表-帮你提高 N 倍效率</p>
<h2 id="进入-vim">进入 vim</h2>
<table>
<thead>
<tr>
<th style="text-align:left">命令</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">vim filename</td>
<td style="text-align:left">打开或新建文件，并将光标置于第一行首</td>
</tr>
<tr>
<td style="text-align:left">vim +n filename</td>
<td style="text-align:left">打开文件，并将光标置于第 n 行首</td>
</tr>
<tr>
<td style="text-align:left">vim + filename</td>
<td style="text-align:left">打开文件，并将光标置于最后一行首</td>
</tr>
<tr>
<td style="text-align:left">vim +/pattern filename</td>
<td style="text-align:left">打开文件，并将光标置于第一个与 pattern 匹配的串处</td>
</tr>
<tr>
<td style="text-align:left">vim -r filename</td>
<td style="text-align:left">在上次正用 vim 编辑时发生系统崩溃，恢复 filename</td>
</tr>
<tr>
<td style="text-align:left">vim filename….filename</td>
<td style="text-align:left">打开多个文件，依次编辑</td>
</tr>
</tbody>
</table>
<h2 id="vim-配置">vim 配置</h2>
<table>
<thead>
<tr>
<th style="text-align:left">命令</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">all</td>
<td style="text-align:left">列出所有选项设置情况</td>
</tr>
<tr>
<td style="text-align:left">term</td>
<td style="text-align:left">设置终端类型</td>
</tr>
<tr>
<td style="text-align:left">ignorance</td>
<td style="text-align:left">在搜索中忽略大小写</td>
</tr>
<tr>
<td style="text-align:left">list</td>
<td style="text-align:left">显示制表位 (Ctrl+I) 和行尾标志（$)</td>
</tr>
<tr>
<td style="text-align:left">number</td>
<td style="text-align:left">显示行号</td>
</tr>
<tr>
<td style="text-align:left">report</td>
<td style="text-align:left">显示由面向行的命令修改过的数目</td>
</tr>
<tr>
<td style="text-align:left">terse</td>
<td style="text-align:left">显示简短的警告信息</td>
</tr>
<tr>
<td style="text-align:left">warn</td>
<td style="text-align:left">在转到别的文件时若没保存当前文件则显示 NO write 信息</td>
</tr>
<tr>
<td style="text-align:left">nomagic</td>
<td style="text-align:left">允许在搜索模式中，使用前面不带“\”的特殊字符</td>
</tr>
<tr>
<td style="text-align:left">nowrapscan</td>
<td style="text-align:left">禁止 vi 在搜索到达文件两端时，又从另一端开始</td>
</tr>
<tr>
<td style="text-align:left">mesg</td>
<td style="text-align:left">允许 vi 显示其他用户用 write 写到自己终端上的信息</td>
</tr>
<tr>
<td style="text-align:left">:set number / set nonumber</td>
<td style="text-align:left">显示/不显示行号</td>
</tr>
<tr>
<td style="text-align:left">:set ruler /set noruler</td>
<td style="text-align:left">显示/不显示标尺</td>
</tr>
<tr>
<td style="text-align:left">:set hlsearch</td>
<td style="text-align:left">高亮显示查找到的单词</td>
</tr>
<tr>
<td style="text-align:left">:set nohlsearch</td>
<td style="text-align:left">关闭高亮显示</td>
</tr>
<tr>
<td style="text-align:left">:syntax on</td>
<td style="text-align:left">语法高亮</td>
</tr>
<tr>
<td style="text-align:left">:set nu</td>
<td style="text-align:left">显示行号</td>
</tr>
<tr>
<td style="text-align:left">:set tabstop=8</td>
<td style="text-align:left">设置 tab 大小，8 为最常用最普遍的设置</td>
</tr>
<tr>
<td style="text-align:left">:set softtabstop=8</td>
<td style="text-align:left">4:4 个空格，8: 正常的制表符，12: 一个制表符 4 个空格，16: 两个制表符</td>
</tr>
<tr>
<td style="text-align:left">:set autoindent</td>
<td style="text-align:left">自动缩进</td>
</tr>
<tr>
<td style="text-align:left">:set cindent</td>
<td style="text-align:left">C 语言格式里面的自动缩进</td>
</tr>
</tbody>
</table>
<h2 id="移动光标">移动光标</h2>
<table>
<thead>
<tr>
<th style="text-align:left">命令</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">k nk</td>
<td style="text-align:left">上 向上移动 n 行</td>
</tr>
<tr>
<td style="text-align:left">j nj</td>
<td style="text-align:left">下 向下移动 n 行</td>
</tr>
<tr>
<td style="text-align:left">h nh</td>
<td style="text-align:left">左 向左移动 n 行</td>
</tr>
<tr>
<td style="text-align:left">l nl</td>
<td style="text-align:left">右 向右移动 n 行</td>
</tr>
<tr>
<td style="text-align:left">Space</td>
<td style="text-align:left">光标右移一个字符</td>
</tr>
<tr>
<td style="text-align:left">Backspace</td>
<td style="text-align:left">光标左移一个字符</td>
</tr>
<tr>
<td style="text-align:left">Enter</td>
<td style="text-align:left">光标下移一行</td>
</tr>
<tr>
<td style="text-align:left">w/W</td>
<td style="text-align:left">光标右移一个字至字首</td>
</tr>
<tr>
<td style="text-align:left">b/B</td>
<td style="text-align:left">光标左移一个字至字首</td>
</tr>
<tr>
<td style="text-align:left">e 或 E</td>
<td style="text-align:left">光标右移一个字至字尾</td>
</tr>
<tr>
<td style="text-align:left">)</td>
<td style="text-align:left">光标移至句尾</td>
</tr>
<tr>
<td style="text-align:left">(</td>
<td style="text-align:left">光标移至句首</td>
</tr>
<tr>
<td style="text-align:left">}</td>
<td style="text-align:left">光标移至段落开头</td>
</tr>
<tr>
<td style="text-align:left">{</td>
<td style="text-align:left">光标移至段落结尾</td>
</tr>
<tr>
<td style="text-align:left">n$</td>
<td style="text-align:left">光标移至第 n 行尾</td>
</tr>
<tr>
<td style="text-align:left">H</td>
<td style="text-align:left">光标移至屏幕顶行</td>
</tr>
<tr>
<td style="text-align:left">M</td>
<td style="text-align:left">光标移至屏幕中间行</td>
</tr>
<tr>
<td style="text-align:left">L</td>
<td style="text-align:left">光标移至屏幕最后行</td>
</tr>
<tr>
<td style="text-align:left">0</td>
<td style="text-align:left">（注意是数字零）光标移至当前行首</td>
</tr>
<tr>
<td style="text-align:left">^</td>
<td style="text-align:left">移动光标到行首第一个非空字符上去</td>
</tr>
<tr>
<td style="text-align:left">$</td>
<td style="text-align:left">光标移至当前行尾</td>
</tr>
<tr>
<td style="text-align:left">gg</td>
<td style="text-align:left">移到第一行</td>
</tr>
<tr>
<td style="text-align:left">G</td>
<td style="text-align:left">移到最后一行</td>
</tr>
<tr>
<td style="text-align:left">f</td>
<td style="text-align:left">移动光标到当前行的字符 a 上</td>
</tr>
<tr>
<td style="text-align:left">F</td>
<td style="text-align:left">相反</td>
</tr>
<tr>
<td style="text-align:left">%</td>
<td style="text-align:left">移动到与制匹配的括号上去（），{}，[]，&lt;&gt;等</td>
</tr>
<tr>
<td style="text-align:left">nG</td>
<td style="text-align:left">移动到第 n 行上</td>
</tr>
<tr>
<td style="text-align:left">G</td>
<td style="text-align:left">到最后一行</td>
</tr>
</tbody>
</table>
<h2 id="屏幕滚动">屏幕滚动</h2>
<table>
<thead>
<tr>
<th style="text-align:left">命令</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">Ctrl+u</td>
<td style="text-align:left">向文件首翻半屏</td>
</tr>
<tr>
<td style="text-align:left">Ctrl+d</td>
<td style="text-align:left">向文件尾翻半屏</td>
</tr>
<tr>
<td style="text-align:left">Ctrl+f</td>
<td style="text-align:left">向文件尾翻一屏</td>
</tr>
<tr>
<td style="text-align:left">Ctrl ＋ b</td>
<td style="text-align:left">向文件首翻一屏</td>
</tr>
<tr>
<td style="text-align:left">nz</td>
<td style="text-align:left">将第 n 行滚至屏幕顶部，不指定 n 时将当前行滚至屏幕顶部</td>
</tr>
</tbody>
</table>
<h2 id="插入文本类">插入文本类</h2>
<table>
<thead>
<tr>
<th style="text-align:left">命令</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">i</td>
<td style="text-align:left">在光标前</td>
</tr>
<tr>
<td style="text-align:left">I</td>
<td style="text-align:left">在当前行首</td>
</tr>
<tr>
<td style="text-align:left">a</td>
<td style="text-align:left">光标后</td>
</tr>
<tr>
<td style="text-align:left">A</td>
<td style="text-align:left">在当前行尾</td>
</tr>
<tr>
<td style="text-align:left">o</td>
<td style="text-align:left">在当前行之下新开一行</td>
</tr>
<tr>
<td style="text-align:left">O</td>
<td style="text-align:left">在当前行之上新开一行</td>
</tr>
<tr>
<td style="text-align:left">r</td>
<td style="text-align:left">替换当前字符</td>
</tr>
<tr>
<td style="text-align:left">R</td>
<td style="text-align:left">替换当前字符及其后的字符，直至按 ESC 键</td>
</tr>
<tr>
<td style="text-align:left">s</td>
<td style="text-align:left">从当前光标位置处开始，以输入的文本替代指定数目的字符</td>
</tr>
<tr>
<td style="text-align:left">S</td>
<td style="text-align:left">删除指定数目的行，并以所输入文本代替之</td>
</tr>
<tr>
<td style="text-align:left">ncw/nCW</td>
<td style="text-align:left">修改指定数目的字</td>
</tr>
<tr>
<td style="text-align:left">nCC</td>
<td style="text-align:left">修改指定数目的行</td>
</tr>
</tbody>
</table>
<h2 id="删除命令">删除命令</h2>
<table>
<thead>
<tr>
<th style="text-align:left">命令</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">x/X</td>
<td style="text-align:left">删除一个字符，x 删除光标后的，而 X 删除光标前的</td>
</tr>
<tr>
<td style="text-align:left">dw</td>
<td style="text-align:left">删除一个单词（删除光标位置到下一个单词开始的位置）</td>
</tr>
<tr>
<td style="text-align:left">dnw</td>
<td style="text-align:left">删除 n 个单词</td>
</tr>
<tr>
<td style="text-align:left">dne</td>
<td style="text-align:left">也可，只是删除到单词尾</td>
</tr>
<tr>
<td style="text-align:left">do</td>
<td style="text-align:left">删至行首</td>
</tr>
<tr>
<td style="text-align:left">d$</td>
<td style="text-align:left">删至行尾</td>
</tr>
<tr>
<td style="text-align:left">dd</td>
<td style="text-align:left">删除一行</td>
</tr>
<tr>
<td style="text-align:left">ndd</td>
<td style="text-align:left">删除当前行及其后 n-1 行</td>
</tr>
<tr>
<td style="text-align:left">dnl</td>
<td style="text-align:left">向右删除 n 个字母</td>
</tr>
<tr>
<td style="text-align:left">dnh</td>
<td style="text-align:left">向左删除 n 个字母</td>
</tr>
<tr>
<td style="text-align:left">dnj</td>
<td style="text-align:left">向下删除 n 行，当前行+其上 n 行</td>
</tr>
<tr>
<td style="text-align:left">dnk</td>
<td style="text-align:left">向上删除 n 行，当期行+其下 n 行</td>
</tr>
<tr>
<td style="text-align:left">cnw[word]</td>
<td style="text-align:left">将 n 个 word 改变为 word</td>
</tr>
<tr>
<td style="text-align:left">C$</td>
<td style="text-align:left">改变到行尾</td>
</tr>
<tr>
<td style="text-align:left">cc</td>
<td style="text-align:left">改变整行</td>
</tr>
<tr>
<td style="text-align:left">shift+j</td>
<td style="text-align:left">删除行尾的换行符，下一行接上来了</td>
</tr>
</tbody>
</table>
<h2 id="复制粘贴">复制粘贴</h2>
<table>
<thead>
<tr>
<th style="text-align:left">命令</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">p</td>
<td style="text-align:left">粘贴用 x 或 d 删除的文本</td>
</tr>
<tr>
<td style="text-align:left">ynw</td>
<td style="text-align:left">复制 n 个单词</td>
</tr>
<tr>
<td style="text-align:left">yy</td>
<td style="text-align:left">复制一行</td>
</tr>
<tr>
<td style="text-align:left">ynl</td>
<td style="text-align:left">复制 n 个字符</td>
</tr>
<tr>
<td style="text-align:left">y$</td>
<td style="text-align:left">复制当前光标至行尾处</td>
</tr>
<tr>
<td style="text-align:left">nyy</td>
<td style="text-align:left">拷贝 n 行</td>
</tr>
</tbody>
</table>
<h2 id="撤销">撤销</h2>
<table>
<thead>
<tr>
<th style="text-align:left">命令</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">u</td>
<td style="text-align:left">撤销前一次的操作</td>
</tr>
<tr>
<td style="text-align:left">shif+u(U)</td>
<td style="text-align:left">撤销对该行的所有操作</td>
</tr>
</tbody>
</table>
<h2 id="搜索及替换">搜索及替换</h2>
<table>
<thead>
<tr>
<th style="text-align:left">命令</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">/pattern</td>
<td style="text-align:left">从光标开始处向文件尾搜索 pattern</td>
</tr>
<tr>
<td style="text-align:left">?pattern</td>
<td style="text-align:left">从光标开始处向文件首搜索 pattern</td>
</tr>
<tr>
<td style="text-align:left">n</td>
<td style="text-align:left">在同一方向重复上一次搜索命令</td>
</tr>
<tr>
<td style="text-align:left">N</td>
<td style="text-align:left">在反方向上重复上一次搜索命令</td>
</tr>
<tr>
<td style="text-align:left">cw newword</td>
<td style="text-align:left">替换为 newword</td>
</tr>
<tr>
<td style="text-align:left">n</td>
<td style="text-align:left">继续查找</td>
</tr>
<tr>
<td style="text-align:left">.</td>
<td style="text-align:left">执行替换</td>
</tr>
<tr>
<td style="text-align:left">:s/p1/p2/g</td>
<td style="text-align:left">将当前行中所有 p1 均用 p2 替代，g 表示执行 用 c 表示需要确认</td>
</tr>
<tr>
<td style="text-align:left">:n1,n2 s/p1/p2/g</td>
<td style="text-align:left">将第 n1 至 n2 行中所有 p1 均用 p2 替代</td>
</tr>
<tr>
<td style="text-align:left">:g/p1/s//p2/g</td>
<td style="text-align:left">将文件中所有 p1 均用 p2 替换</td>
</tr>
<tr>
<td style="text-align:left">:1,$ s/string1/string2/g</td>
<td style="text-align:left">在全文中将 string1 替换为 string2</td>
</tr>
</tbody>
</table>
<h2 id="书签">书签</h2>
<table>
<thead>
<tr>
<th style="text-align:left">命令</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">m[a-z]</td>
<td style="text-align:left">在文中做标记，标记号可为 a-z 的 26 个字母</td>
</tr>
<tr>
<td style="text-align:left">`a</td>
<td style="text-align:left">移动到标记 a 处</td>
</tr>
</tbody>
</table>
<h2 id="visual-模式">visual 模式</h2>
<table>
<thead>
<tr>
<th style="text-align:left">命令</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">v</td>
<td style="text-align:left">进入 visual 模式</td>
</tr>
<tr>
<td style="text-align:left">V</td>
<td style="text-align:left">进入行的 visual 模式</td>
</tr>
<tr>
<td style="text-align:left">ctrl+v</td>
<td style="text-align:left">进如块操作模式用 o 和 O 改变选择的边的大小</td>
</tr>
<tr>
<td style="text-align:left">在所有行插入相同的内容如 include&lt;</td>
<td style="text-align:left">将光标移到开始插入的位置，按 CTRL+V 进入 VISUAL 模式，选择好模块后按 I（shift+i)，后插入要插入的文本，按 [ESC] 完成</td>
</tr>
</tbody>
</table>
<h2 id="行方式命令">行方式命令</h2>
<table>
<thead>
<tr>
<th style="text-align:left">命令</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">:n1,n2 co n3</td>
<td style="text-align:left">将 n1 行到 n2 行之间的内容拷贝到第 n3 行下</td>
</tr>
<tr>
<td style="text-align:left">:n1,n2 m n3</td>
<td style="text-align:left">将 n1 行到 n2 行之间的内容移至到第 n3 行下</td>
</tr>
<tr>
<td style="text-align:left">:n1,n2 d</td>
<td style="text-align:left">将 n1 行到 n2 行之间的内容删除</td>
</tr>
<tr>
<td style="text-align:left">:n1,n2 w!command</td>
<td style="text-align:left">将文件中 n1 行至 n2 行的内容作为 command 的输入并执行之</td>
</tr>
<tr>
<td style="text-align:left">若不指定 n1，n2，则表示将整个文件内容作为 command 的输入</td>
<td style="text-align:left"></td>
</tr>
</tbody>
</table>
<h2 id="宏">宏</h2>
<table>
<thead>
<tr>
<th style="text-align:left">命令</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">q[a-z]</td>
<td style="text-align:left">开始记录但前开始的操作为宏，名称可为【a-z】，然后用 q 终止录制宏</td>
</tr>
<tr>
<td style="text-align:left">reg</td>
<td style="text-align:left">显示当前定义的所有的宏，用@[a-z] 来在当前光标处执行宏 [a-z]</td>
</tr>
</tbody>
</table>
<h2 id="窗口操作">窗口操作</h2>
<table>
<thead>
<tr>
<th style="text-align:left">命令</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">:split</td>
<td style="text-align:left">分割一个窗口</td>
</tr>
<tr>
<td style="text-align:left">:split file.c</td>
<td style="text-align:left">为另一个文件 file.c 分隔窗口</td>
</tr>
<tr>
<td style="text-align:left">:nsplit file.c</td>
<td style="text-align:left">为另一个文件 file.c 分隔窗口，并指定其行数</td>
</tr>
<tr>
<td style="text-align:left">ctrl ＋ w</td>
<td style="text-align:left">在窗口中切换</td>
</tr>
<tr>
<td style="text-align:left">:close</td>
<td style="text-align:left">关闭当前窗口</td>
</tr>
</tbody>
</table>
<h2 id="文件及其他">文件及其他</h2>
<table>
<thead>
<tr>
<th style="text-align:left">命令</th>
<th style="text-align:left">描述</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left">:q</td>
<td style="text-align:left">退出 vi</td>
</tr>
<tr>
<td style="text-align:left">:q!</td>
<td style="text-align:left">不保存文件并退出 vi</td>
</tr>
<tr>
<td style="text-align:left">:e filename</td>
<td style="text-align:left">打开文件 filename 进行编辑</td>
</tr>
<tr>
<td style="text-align:left">:e!</td>
<td style="text-align:left">放弃修改文件内容，重新载入该文件编辑</td>
</tr>
<tr>
<td style="text-align:left">:w</td>
<td style="text-align:left">保存当前文件</td>
</tr>
<tr>
<td style="text-align:left">:wq</td>
<td style="text-align:left">存盘退出</td>
</tr>
<tr>
<td style="text-align:left">:ZZ</td>
<td style="text-align:left">保存当前文档并退出 VIM</td>
</tr>
<tr>
<td style="text-align:left">:!command</td>
<td style="text-align:left">执行 shell 命令 command</td>
</tr>
<tr>
<td style="text-align:left">:r!command</td>
<td style="text-align:left">将命令 command 的输出结果放到当前行</td>
</tr>
<tr>
<td style="text-align:left">:n1,n2 write temp.c</td>
<td style="text-align:left"></td>
</tr>
<tr>
<td style="text-align:left">:read file.c</td>
<td style="text-align:left">将文件 file.c 的内容插入到当前光标所在的下面</td>
</tr>
</tbody>
</table>]]></description></item><item><title>The equation-SGU106（扩展欧几里得）</title><link>https://lruihao.cn/posts/euclid/</link><pubDate>Fri, 10 Aug 2018 10:32:39 +0000</pubDate><author>Lruihao</author><guid>https://lruihao.cn/posts/euclid/</guid><description><![CDATA[<h3 id="题意">题意：</h3>
<p>给出 a,b,c,x1,x2,y1,y2，求满足 ax+by+c=0，且 x∈[x1,x2],y∈[y1,y2] 的整数解个数。</p>
<h3 id="分析">分析：</h3>
<p>对于解二元一次不定方程，容易想到利用扩展欧几里得求出一组可行解后找到通解，下面来介绍一下欧几里得以及扩展欧几里得。</p>
<h4 id="欧几里得">欧几里得：</h4>
<p>又名辗转相除法，是用来计算两个数的最大公约数，其中就是利用 gcd(a,b)=gcd(b,a mod b) 来求解。下证 gcd(a,b)=gcd(b,a mod b) 的正确性：</p>
<p>设 a,b 的一个公约数为 d</p>
<p>设 a mod b=r，则 a=kb+r(k 为整数），r=a-kb</p>
<p>因为 d|a,d|b</p>
<p>所以 d|a-kb, 即 d|r，而 r=a mod b</p>
<p>所以 d 为 b,a mod b 的公约数</p>
<p>又因为 d 也为 a,b 的公约数，所以（a,b) 和 (b,a mod b) 的公约数一样，所以最大公约数必然一样，得证。</p>
<p>代码描述：</p>
<div class="highlight" id="id-1"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-c" data-lang="c"><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">gcd</span><span class="p">(</span><span class="kt">int</span> <span class="n">a</span><span class="p">,</span><span class="kt">int</span> <span class="n">b</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="p">(</span><span class="n">b</span><span class="o">==</span><span class="mi">0</span><span class="p">)</span> <span class="k">return</span> <span class="n">a</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="nf">gcd</span><span class="p">(</span><span class="n">b</span><span class="p">,</span><span class="n">a</span><span class="o">%</span><span class="n">b</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre></td></tr></table>
</div>
</div><h4 id="扩展欧几里得">扩展欧几里得</h4>
<p>顾名思义，为上述欧几里得算法的扩展。欧几里得是用来求 a,b 的最大公约数，那么扩展欧几里得不仅能求出 a,b 的最大公约数，还能求出满足 ax+by=gcd(a,b) 的一组可行解。<br>
求解过程中，扩展欧几里得比欧几里得多了一个赋值过程，具体证明如下：</p>
<p>设 ax1+by1=gcd(a,b),bx2+(a mod b)y2=gcd(b,a mod b)</p>
<p>因为由欧几里得算法可知，gcd(a,b)=gcd(b,a mod b)</p>
<p>所以 ax1+by1=bx2+(a mod b)y2</p>
<p>因为<code>a mod b=a-(a div b)*b（div 为整除</code></p>
<p>所以有<code>ax1+by1=bx2+(a-(a div b)*b)y2</code></p>
<p>将右边移项，展开得：</p>
<div class="highlight" id="id-2"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">ax1+by1=ay2+bx2-(a div b)*b*y2
</span></span><span class="line"><span class="cl">       =ay2+b[x2-(a div b)]y2</span></span></code></pre></td></tr></table>
</div>
</div><p>所以可得：
<code>x1=y2</code>
<code>y1=x2-(a div b)*y2</code></p>
<p>将得到的的 x1,y1 递归操作求解 x2,y2，如此循环往复，将会像欧几里得一样得到 b=0 的情况，此时递归结束，返回 x=1,y=0，回溯得解。</p>
<p>代码描述：</p>
<p>此函数返回的是 a,b 的最大公约数，同时也求解出满足 ax+by=gcd(a,b) 的一组可行的 (x,y)</p>
<div class="highlight" id="id-3"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span><span class="lnt">8
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-c" data-lang="c"><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">exgcd</span><span class="p">(</span><span class="kt">int</span> <span class="n">a</span><span class="p">,</span><span class="kt">int</span> <span class="n">b</span><span class="p">,</span><span class="kt">int</span> <span class="o">&amp;</span><span class="n">x</span><span class="p">,</span><span class="kt">int</span> <span class="o">&amp;</span><span class="n">y</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="p">(</span><span class="n">b</span><span class="o">==</span><span class="mi">0</span><span class="p">)</span> <span class="p">{</span><span class="n">x</span><span class="o">=</span><span class="mi">1</span><span class="p">;</span><span class="n">y</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="k">return</span> <span class="n">a</span><span class="p">;}</span>
</span></span><span class="line"><span class="cl">    <span class="kt">int</span> <span class="n">t</span><span class="o">=</span><span class="nf">exgcd</span><span class="p">(</span><span class="n">b</span><span class="p">,</span><span class="n">a</span><span class="o">%</span><span class="n">b</span><span class="p">,</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="kt">int</span> <span class="n">x0</span><span class="o">=</span><span class="n">x</span><span class="p">,</span><span class="n">y0</span><span class="o">=</span><span class="n">y</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">x</span><span class="o">=</span><span class="n">y0</span><span class="p">;</span><span class="n">y</span><span class="o">=</span><span class="n">x0</span><span class="o">-</span><span class="p">(</span><span class="n">a</span><span class="o">/</span><span class="n">b</span><span class="p">)</span><span class="o">*</span><span class="n">y0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">t</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre></td></tr></table>
</div>
</div><h4 id="关于求解二元一次不定方程-axbyc">关于求解二元一次不定方程 ax+by=c</h4>
<p>首先，如果 c 不是 gcd(a,b) 的倍数，方程显然无解。</p>
<p>扩展欧几里得求解的是 ax+by=gcd(a,b)=1 的可行解，但是题目中并没有说 c 与 a,b 互质之类的条件，所以需要在开始时两边同时除以 gcd(a,b)。</p>
<p>设 d=gcd(a,b)</p>
<p>设 a&rsquo;=a/d,b&rsquo;=b/d,c&rsquo;=c/d,</p>
<p>则下面需要求解 a&rsquo;x+b&rsquo;y=c&rsquo;的整数解，而 gcd(a&rsquo;,b&rsquo;)=1，</p>
<p>则我们只需求 a&rsquo;x+b&rsquo;y=1 的可行解</p>
<p>直接使用扩展欧几里得，得到 (x&rsquo;,y&rsquo;), 则最终解为<code>x'*c',y'*c'</code>设为 (x0,y0)。</p>
<p>现在得到了一组可行解，但是如何得到通解呢？</p>
<p>将 (x0,y0) 代入 ax+by=c，则有</p>
<p><code>a*(x0)+b*(y0)=c</code></p>
<p>通过拆添项，可有：</p>
<div class="highlight" id="id-4"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt">1
</span><span class="lnt">2
</span><span class="lnt">3
</span><span class="lnt">4
</span><span class="lnt">5
</span><span class="lnt">6
</span><span class="lnt">7
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-fallback" data-lang="fallback"><span class="line"><span class="cl">a*(x0+1*b)+b*(y0-1*a)=c
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">a*(x0+2*b)+b*(y0-2*a)=c
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">a*(x0+3*b)+b*(y0-3*a)=c
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">……</span></span></code></pre></td></tr></table>
</div>
</div><p><code>a*(x0+k*b)+b*(y0-k*a)=c (k∈Z)</code></p>
<p>至此，我们得到了通解的方程</p>
<p><code>x=x0+k*b</code>
<code>y=y0-k*a (k∈Z)</code></p>
<p>这样，所有满足 ax+by=c 的可行解都可求出。</p>
<h3 id="具体实现">具体实现</h3>
<p>有了主体算法，下面要谈到具体实现了。</p>
<h4 id="先处理一下无解的情况">先处理一下无解的情况：</h4>
<ol>
<li>
<p>当 a=0 并且 b=0，而 c≠0 时，显然无解；<br>
当 a=0,b=0，而 c=0 时，[x1,x2],[y1,y2] 都为可行解，根据乘法原理，可行解的个数为<code>(x2-x1+1)*(y2-y1+1)</code>;</p>
</li>
<li>
<p>当 a=0 b≠0 时：<br>
此时即为求解 by=c，则 y=c/b，<br>
如果 c/b 不是整数或 c/b 不在 [y1,y2] 的范围内，无解<br>
否则 [x1,x2] 内全部整数都为可行解。</p>
</li>
<li>
<p>当 b=0,a≠0 时，同上。</p>
</li>
<li>
<p>若 c 不是 gcd(a,b) 的个数，方程显然无解。</p>
</li>
</ol>
<h4 id="处理完了一些繁琐的细节后下面是具体的求解过程">处理完了一些繁琐的细节后，下面是具体的求解过程：</h4>
<ol>
<li>
<p>扩展欧几里得求解的是 ax+by=c，而本题是 ax+by+c=0，需将 c 移项。</p>
</li>
<li>
<p>对于本道题，首先要注意的是，对于负数的模运算在此算法中无法得到正确解，所以要处理一下 a,b,c 的正负情况。
如果 a 为负数，只需将 a 取相反数后，再处理一下 x∈[x1,x2] 的范围。当 a 取了相反数，相当于把 x 也取反，则需要把 x 的范围由 [x1,x2] 转变成 [-x2,-x1], 类似于把数轴反了过来。b 同理。</p>
</li>
<li>
<p>利用扩展欧几里得解二元一次不定方程，得到一组可行解 (x0,y0)。</p>
</li>
<li>
<p>因为题目中对 x,y 有条件约束，而有 x=x0+kb,y=y0-kb，我们可以求出满足 x∈[x1,x2],y∈[y1,y2] 的 k 的取值范围，
即为求解 x1&lt;=x0+kb&lt;=x2,y1&lt;=y0-kb&lt;=y2 的整数 k 的个数
但是在求解这两个一次函数的过程中，会有除不尽的现象，该如何取整呢？</p>
</li>
</ol>
<p>举个例子</p>
<p>当出现 2.5&lt;=k&lt;=5.5 时，我们需要的可行的 k 为 3,4,5，所以需要将 2.5 向上取整得到 3，5.5 向下取整得到 5，即为 3&lt;=k&lt;=5；</p>
<p>当出现-5.5&lt;=&lt;=-2.5 时，我们需要的可行的 k 为-5,-4,-3, 所以需要将-5.5 向上取整得到-5,-2.5 向下取整得到-3，即为-5&lt;=k&lt;=-3；</p>
<p>正负数的情况都已经考虑完全了，可以得到取整的结论：上界下取整，下界上取整。</p>
<p>最后，将得到的两个范围取交集，得到 [l,r]，则最终答案为 r-l+1。</p>
<p>这样，本题就可以完美解决了。</p>
<div class="highlight" id="id-5"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span><span class="lnt">30
</span><span class="lnt">31
</span><span class="lnt">32
</span><span class="lnt">33
</span><span class="lnt">34
</span><span class="lnt">35
</span><span class="lnt">36
</span><span class="lnt">37
</span><span class="lnt">38
</span><span class="lnt">39
</span><span class="lnt">40
</span><span class="lnt">41
</span><span class="lnt">42
</span><span class="lnt">43
</span><span class="lnt">44
</span><span class="lnt">45
</span><span class="lnt">46
</span><span class="lnt">47
</span><span class="lnt">48
</span><span class="lnt">49
</span><span class="lnt">50
</span><span class="lnt">51
</span><span class="lnt">52
</span><span class="lnt">53
</span><span class="lnt">54
</span><span class="lnt">55
</span><span class="lnt">56
</span><span class="lnt">57
</span><span class="lnt">58
</span><span class="lnt">59
</span><span class="lnt">60
</span><span class="lnt">61
</span><span class="lnt">62
</span><span class="lnt">63
</span><span class="lnt">64
</span><span class="lnt">65
</span><span class="lnt">66
</span><span class="lnt">67
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-cpp" data-lang="cpp"><span class="line"><span class="cl"><span class="c1">// BY Rinyo
</span></span></span><span class="line"><span class="cl"><span class="c1"></span>
</span></span><span class="line"><span class="cl"><span class="cp">#include</span><span class="cpf">&lt;cstdio&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp">#include</span><span class="cpf">&lt;cmath&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp"></span><span class="kt">long</span> <span class="kt">long</span> <span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">,</span><span class="n">c</span><span class="p">,</span><span class="n">x1</span><span class="p">,</span><span class="n">x2</span><span class="p">,</span><span class="n">yy1</span><span class="p">,</span><span class="n">y2</span><span class="p">,</span><span class="n">x0</span><span class="p">,</span><span class="n">yy0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="kr">inline</span> <span class="kt">long</span> <span class="kt">long</span> <span class="nf">cmin</span><span class="p">(</span><span class="k">const</span> <span class="kt">long</span> <span class="kt">long</span> <span class="o">&amp;</span><span class="n">x</span><span class="p">,</span><span class="k">const</span> <span class="kt">long</span> <span class="kt">long</span> <span class="o">&amp;</span><span class="n">y</span><span class="p">)</span> <span class="p">{</span><span class="k">return</span> <span class="n">x</span><span class="o">&lt;</span><span class="n">y</span><span class="o">?</span><span class="nl">x</span><span class="p">:</span><span class="n">y</span><span class="p">;}</span>
</span></span><span class="line"><span class="cl"><span class="kr">inline</span> <span class="kt">long</span> <span class="kt">long</span> <span class="nf">cmax</span><span class="p">(</span><span class="k">const</span> <span class="kt">long</span> <span class="kt">long</span> <span class="o">&amp;</span><span class="n">x</span><span class="p">,</span><span class="k">const</span> <span class="kt">long</span> <span class="kt">long</span> <span class="o">&amp;</span><span class="n">y</span><span class="p">)</span> <span class="p">{</span><span class="k">return</span> <span class="n">x</span><span class="o">&gt;</span><span class="n">y</span><span class="o">?</span><span class="nl">x</span><span class="p">:</span><span class="n">y</span><span class="p">;}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kt">long</span> <span class="kt">long</span> <span class="nf">gcd</span><span class="p">(</span><span class="kt">long</span> <span class="kt">long</span> <span class="n">a</span><span class="p">,</span><span class="kt">long</span> <span class="kt">long</span> <span class="n">b</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="p">(</span><span class="n">b</span><span class="o">==</span><span class="mi">0</span><span class="p">)</span> <span class="k">return</span> <span class="n">a</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">gcd</span><span class="p">(</span><span class="n">b</span><span class="p">,</span><span class="n">a</span> <span class="o">%</span> <span class="n">b</span><span class="p">);</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="kt">void</span> <span class="nf">exgcd</span><span class="p">(</span><span class="kt">long</span> <span class="kt">long</span> <span class="n">a</span><span class="p">,</span><span class="kt">long</span> <span class="kt">long</span> <span class="n">b</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="p">(</span><span class="n">b</span><span class="o">==</span><span class="mi">0</span><span class="p">){</span><span class="n">x0</span><span class="o">=</span><span class="mi">1</span><span class="p">;</span><span class="n">yy0</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span><span class="k">return</span><span class="p">;}</span>
</span></span><span class="line"><span class="cl">    <span class="n">exgcd</span><span class="p">(</span><span class="n">b</span><span class="p">,</span><span class="n">a</span><span class="o">%</span><span class="n">b</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="kt">long</span> <span class="kt">long</span> <span class="n">t</span><span class="o">=</span><span class="n">x0</span><span class="p">;</span><span class="n">x0</span><span class="o">=</span><span class="n">yy0</span><span class="p">;</span><span class="n">yy0</span><span class="o">=</span><span class="n">t</span><span class="o">-</span><span class="n">a</span><span class="o">/</span><span class="n">b</span><span class="o">*</span><span class="n">yy0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">main</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="n">scanf</span><span class="p">(</span><span class="s">&#34;%I64d%I64d%I64d%I64d%I64d%I64d%I64d&#34;</span><span class="p">,</span><span class="o">&amp;</span><span class="n">a</span><span class="p">,</span><span class="o">&amp;</span><span class="n">b</span><span class="p">,</span><span class="o">&amp;</span><span class="n">c</span><span class="p">,</span><span class="o">&amp;</span><span class="n">x1</span><span class="p">,</span><span class="o">&amp;</span><span class="n">x2</span><span class="p">,</span><span class="o">&amp;</span><span class="n">yy1</span><span class="p">,</span><span class="o">&amp;</span><span class="n">y2</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="n">c</span><span class="o">=-</span><span class="n">c</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="p">(</span><span class="n">c</span><span class="o">&lt;</span><span class="mi">0</span><span class="p">)</span> <span class="p">{</span><span class="n">a</span><span class="o">=-</span><span class="n">a</span><span class="p">;</span><span class="n">b</span><span class="o">=-</span><span class="n">b</span><span class="p">;</span><span class="n">c</span><span class="o">=-</span><span class="n">c</span><span class="p">;}</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="p">(</span><span class="n">a</span><span class="o">&lt;</span><span class="mi">0</span><span class="p">)</span> <span class="p">{</span><span class="n">a</span><span class="o">=-</span><span class="n">a</span><span class="p">;</span><span class="kt">long</span> <span class="kt">long</span> <span class="n">t</span><span class="o">=</span><span class="n">x1</span><span class="p">;</span><span class="n">x1</span><span class="o">=-</span><span class="n">x2</span><span class="p">;</span><span class="n">x2</span><span class="o">=-</span><span class="n">t</span><span class="p">;}</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="p">(</span><span class="n">b</span><span class="o">&lt;</span><span class="mi">0</span><span class="p">)</span> <span class="p">{</span><span class="n">b</span><span class="o">=-</span><span class="n">b</span><span class="p">;</span><span class="kt">long</span> <span class="kt">long</span> <span class="n">t</span><span class="o">=</span><span class="n">yy1</span><span class="p">;</span><span class="n">yy1</span><span class="o">=-</span><span class="n">y2</span><span class="p">;</span><span class="n">y2</span><span class="o">=-</span><span class="n">t</span><span class="p">;}</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="p">(</span><span class="n">a</span><span class="o">==</span><span class="mi">0</span> <span class="o">&amp;&amp;</span> <span class="n">b</span><span class="o">==</span><span class="mi">0</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="p">(</span><span class="n">c</span><span class="o">==</span><span class="mi">0</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">        <span class="p">{</span>
</span></span><span class="line"><span class="cl">            <span class="n">printf</span><span class="p">(</span><span class="s">&#34;%I64d&#34;</span><span class="p">,(</span><span class="n">x2</span><span class="o">-</span><span class="n">x1</span><span class="o">+</span><span class="mi">1</span><span class="p">)</span><span class="o">*</span><span class="p">(</span><span class="n">y2</span><span class="o">-</span><span class="n">yy1</span><span class="o">+</span><span class="mi">1</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">            <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="p">}</span>
</span></span><span class="line"><span class="cl">        <span class="n">printf</span><span class="p">(</span><span class="s">&#34;0&#34;</span><span class="p">);</span><span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">a</span><span class="o">==</span><span class="mi">0</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="p">(</span><span class="n">c</span> <span class="o">%</span><span class="n">b</span> <span class="o">==</span><span class="mi">0</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="k">if</span> <span class="p">(</span><span class="n">c</span><span class="o">/</span><span class="n">b</span><span class="o">&lt;=</span><span class="n">y2</span> <span class="o">&amp;&amp;</span> <span class="n">c</span><span class="o">/</span><span class="n">b</span><span class="o">&gt;=</span><span class="n">yy1</span><span class="p">)</span> <span class="p">{</span><span class="n">printf</span><span class="p">(</span><span class="s">&#34;%I64d&#34;</span><span class="p">,</span><span class="n">x2</span><span class="o">-</span><span class="n">x1</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span><span class="k">return</span> <span class="mi">0</span><span class="p">;}</span>
</span></span><span class="line"><span class="cl">        <span class="n">printf</span><span class="p">(</span><span class="s">&#34;0&#34;</span><span class="p">);</span><span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="n">b</span><span class="o">==</span><span class="mi">0</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="k">if</span> <span class="p">(</span><span class="n">c</span><span class="o">%</span><span class="n">a</span><span class="o">==</span><span class="mi">0</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">            <span class="k">if</span> <span class="p">(</span><span class="n">c</span><span class="o">/</span><span class="n">a</span><span class="o">&lt;=</span><span class="n">x2</span> <span class="o">&amp;&amp;</span> <span class="n">c</span><span class="o">/</span><span class="n">a</span><span class="o">&gt;=</span><span class="n">x1</span><span class="p">)</span> <span class="p">{</span><span class="n">printf</span><span class="p">(</span><span class="s">&#34;%I64d&#34;</span><span class="p">,</span><span class="n">y2</span><span class="o">-</span><span class="n">yy1</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span><span class="k">return</span> <span class="mi">0</span><span class="p">;}</span>
</span></span><span class="line"><span class="cl">        <span class="n">printf</span><span class="p">(</span><span class="s">&#34;0&#34;</span><span class="p">);</span><span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="kt">long</span> <span class="kt">long</span> <span class="n">d</span><span class="o">=</span><span class="n">gcd</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="p">(</span><span class="n">c</span><span class="o">%</span><span class="n">d</span><span class="o">!=</span><span class="mi">0</span><span class="p">){</span><span class="n">printf</span><span class="p">(</span><span class="s">&#34;0&#34;</span><span class="p">);</span><span class="k">return</span> <span class="mi">0</span><span class="p">;}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="n">a</span><span class="o">=</span><span class="n">a</span><span class="o">/</span><span class="n">d</span><span class="p">;</span><span class="n">b</span><span class="o">=</span><span class="n">b</span><span class="o">/</span><span class="n">d</span><span class="p">;</span><span class="n">c</span><span class="o">=</span><span class="n">c</span><span class="o">/</span><span class="n">d</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">exgcd</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="n">x0</span><span class="o">=</span><span class="n">x0</span><span class="o">*</span><span class="n">c</span><span class="p">;</span><span class="n">yy0</span><span class="o">=</span><span class="n">yy0</span><span class="o">*</span><span class="n">c</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">    <span class="kt">double</span> <span class="n">tx2</span><span class="o">=</span><span class="n">x2</span><span class="p">,</span><span class="n">tx1</span><span class="o">=</span><span class="n">x1</span><span class="p">,</span><span class="n">tx0</span><span class="o">=</span><span class="n">x0</span><span class="p">,</span><span class="n">ta</span><span class="o">=</span><span class="n">a</span><span class="p">,</span><span class="n">tb</span><span class="o">=</span><span class="n">b</span><span class="p">,</span><span class="n">tc</span><span class="o">=</span><span class="n">c</span><span class="p">,</span><span class="n">ty1</span><span class="o">=</span><span class="n">yy1</span><span class="p">,</span><span class="n">ty2</span><span class="o">=</span><span class="n">y2</span><span class="p">,</span><span class="n">ty0</span><span class="o">=</span><span class="n">yy0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="kt">long</span> <span class="kt">long</span> <span class="n">down1</span><span class="o">=</span><span class="n">floor</span><span class="p">(((</span><span class="n">tx2</span><span class="o">-</span><span class="n">tx0</span><span class="p">)</span><span class="o">/</span><span class="n">tb</span><span class="p">)),</span><span class="n">down2</span><span class="o">=</span><span class="n">floor</span><span class="p">(((</span><span class="n">ty0</span><span class="o">-</span><span class="n">ty1</span><span class="p">)</span><span class="o">/</span><span class="n">ta</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">    <span class="kt">long</span> <span class="kt">long</span> <span class="n">r</span><span class="o">=</span><span class="n">cmin</span><span class="p">(</span><span class="n">down1</span><span class="p">,</span><span class="n">down2</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="kt">long</span> <span class="kt">long</span> <span class="n">up1</span><span class="o">=</span><span class="n">ceil</span><span class="p">(((</span><span class="n">tx1</span><span class="o">-</span><span class="n">tx0</span><span class="p">)</span><span class="o">/</span><span class="n">tb</span><span class="p">)),</span><span class="n">up2</span><span class="o">=</span><span class="n">ceil</span><span class="p">(((</span><span class="n">ty0</span><span class="o">-</span><span class="n">ty2</span><span class="p">)</span><span class="o">/</span><span class="n">ta</span><span class="p">));</span>
</span></span><span class="line"><span class="cl">    <span class="kt">long</span> <span class="kt">long</span> <span class="n">l</span><span class="o">=</span><span class="n">cmax</span><span class="p">(</span><span class="n">up1</span><span class="p">,</span><span class="n">up2</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="k">if</span> <span class="p">(</span><span class="n">r</span><span class="o">&lt;</span><span class="n">l</span><span class="p">)</span> <span class="n">printf</span><span class="p">(</span><span class="s">&#34;0&#34;</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="k">else</span> <span class="n">printf</span><span class="p">(</span><span class="s">&#34;%I64d&#34;</span><span class="p">,</span><span class="n">r</span><span class="o">-</span><span class="n">l</span><span class="o">+</span><span class="mi">1</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre></td></tr></table>
</div>
</div><p>扩展欧几里得模板</p>
<div class="highlight" id="id-6"><div class="chroma">
<table class="lntable"><tr><td class="lntd">
<pre tabindex="0" class="chroma"><code><span class="lnt"> 1
</span><span class="lnt"> 2
</span><span class="lnt"> 3
</span><span class="lnt"> 4
</span><span class="lnt"> 5
</span><span class="lnt"> 6
</span><span class="lnt"> 7
</span><span class="lnt"> 8
</span><span class="lnt"> 9
</span><span class="lnt">10
</span><span class="lnt">11
</span><span class="lnt">12
</span><span class="lnt">13
</span><span class="lnt">14
</span><span class="lnt">15
</span><span class="lnt">16
</span><span class="lnt">17
</span><span class="lnt">18
</span><span class="lnt">19
</span><span class="lnt">20
</span><span class="lnt">21
</span><span class="lnt">22
</span><span class="lnt">23
</span><span class="lnt">24
</span><span class="lnt">25
</span><span class="lnt">26
</span><span class="lnt">27
</span><span class="lnt">28
</span><span class="lnt">29
</span></code></pre></td>
<td class="lntd">
<pre tabindex="0" class="chroma"><code class="language-c" data-lang="c"><span class="line"><span class="cl"><span class="cp">#include</span><span class="cpf">&lt;iostream&gt;</span><span class="cp">
</span></span></span><span class="line"><span class="cl"><span class="cp"></span><span class="n">using</span> <span class="n">namespace</span> <span class="n">std</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">exgcd</span><span class="p">(</span><span class="kt">int</span> <span class="n">a</span><span class="p">,</span><span class="kt">int</span> <span class="n">b</span><span class="p">,</span><span class="kt">int</span> <span class="o">&amp;</span><span class="n">x</span><span class="p">,</span><span class="kt">int</span> <span class="o">&amp;</span><span class="n">y</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">     <span class="k">if</span><span class="p">(</span><span class="n">b</span><span class="o">==</span><span class="mi">0</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">    <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="n">x</span><span class="o">=</span><span class="mi">1</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="n">y</span><span class="o">=</span><span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">        <span class="k">return</span> <span class="n">a</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="kt">int</span> <span class="n">gcd</span><span class="o">=</span><span class="nf">exgcd</span><span class="p">(</span><span class="n">b</span><span class="p">,</span><span class="n">a</span><span class="o">%</span><span class="n">b</span><span class="p">,</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">);</span>
</span></span><span class="line"><span class="cl">    <span class="kt">int</span> <span class="n">x2</span><span class="o">=</span><span class="n">x</span><span class="p">,</span><span class="n">y2</span><span class="o">=</span><span class="n">y</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">x</span><span class="o">=</span><span class="n">y2</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="n">y</span><span class="o">=</span><span class="n">x2</span><span class="o">-</span><span class="p">(</span><span class="n">a</span><span class="o">/</span><span class="n">b</span><span class="p">)</span><span class="o">*</span><span class="n">y2</span><span class="p">;</span>
</span></span><span class="line"><span class="cl">    <span class="k">return</span> <span class="n">gcd</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="nf">main</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl"><span class="kt">int</span> <span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">,</span><span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="n">cout</span><span class="o">&lt;&lt;</span><span class="s">&#34;请输入 a 和 b:&#34;</span><span class="o">&lt;&lt;</span><span class="n">endl</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="n">cin</span><span class="o">&gt;&gt;</span><span class="n">a</span><span class="o">&gt;&gt;</span><span class="n">b</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="n">cout</span><span class="o">&lt;&lt;</span><span class="s">&#34;a 和 b 的最大公约数：&#34;</span><span class="o">&lt;&lt;</span><span class="n">endl</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="n">cout</span><span class="o">&lt;&lt;</span><span class="nf">exgcd</span><span class="p">(</span><span class="n">a</span><span class="p">,</span><span class="n">b</span><span class="p">,</span><span class="n">x</span><span class="p">,</span><span class="n">y</span><span class="p">)</span><span class="o">&lt;&lt;</span><span class="n">endl</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="n">cout</span><span class="o">&lt;&lt;</span><span class="s">&#34;ax+by=gcd(a,b) 的一组解是：&#34;</span><span class="o">&lt;&lt;</span><span class="n">endl</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="n">cout</span><span class="o">&lt;&lt;</span><span class="n">x</span><span class="o">&lt;&lt;</span><span class="s">&#34; &#34;</span><span class="o">&lt;&lt;</span><span class="n">y</span><span class="o">&lt;&lt;</span><span class="n">endl</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="k">return</span> <span class="mi">0</span><span class="p">;</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre></td></tr></table>
</div>
</div>]]></description></item></channel></rss>