<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Hexo</title>
  
  
  <link href="https://jiejiejiang2004.github.io/atom.xml" rel="self"/>
  
  <link href="https://jiejiejiang2004.github.io/"/>
  <updated>2025-12-10T18:28:24.738Z</updated>
  <id>https://jiejiejiang2004.github.io/</id>
  
  <author>
    <name>jiejiejiang</name>
    
  </author>
  
  <generator uri="https://hexo.io/">Hexo</generator>
  
  <entry>
    <title>C语言核心语法(1)：第一个C程序</title>
    <link href="https://jiejiejiang2004.github.io/2025/12/09/C%E8%AF%AD%E8%A8%80%E6%A0%B8%E5%BF%83%E8%AF%AD%E6%B3%95-1-%E7%AC%AC%E4%B8%80%E4%B8%AAC%E7%A8%8B%E5%BA%8F/"/>
    <id>https://jiejiejiang2004.github.io/2025/12/09/C%E8%AF%AD%E8%A8%80%E6%A0%B8%E5%BF%83%E8%AF%AD%E6%B3%95-1-%E7%AC%AC%E4%B8%80%E4%B8%AAC%E7%A8%8B%E5%BA%8F/</id>
    <published>2025-12-09T07:39:44.000Z</published>
    <updated>2025-12-10T18:28:24.738Z</updated>
    
    <content type="html"><![CDATA[<p>大家好！这里是杰杰酱，以下内容有需要补充的，或者大家有什么意见或者建议，欢迎在评论区留言！ 如果看到我会更新的，欢迎大家批评指正！</p><hr><div style="background-color: #f5fafe; border-radius: 8px; padding: 20px; margin: 10px 0 25px 0; border-left: 4px solid #4299e1;"><p style="font-size: 20px; margin: 0; line-height: 1.6; color: #2d3748; font-style: italic;">“The only way to learn a new programming language is by writing programs in it.”</p><p style="text-align: right; margin: 10px 0 0 0; color: #718096; font-size: 15px;">— Brian W. Kernighan, 《The C Programming Language》</p></div><h3 id="经典示例hello-world-程序">经典示例：Hello, World! 程序</h3><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span> &#123;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;Hello, World!\n&quot;</span>);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>学习C语言的旅程，几乎都是从这个经典的“Hello, World!”程序起步的 —— 相信多数老师都会让大家先写下这段代码。</p><p>今天我们就借着它，拆解C语言的核心基础，迈出入门第一步。</p><hr><h3 id="为什么要这样写">📌 为什么要这样写？</h3><h4 id="int-main程序的入口">1. <code>int main()</code>：程序的入口</h4><p>电脑运行程序时，必须明确“从哪里开始执行”——这是程序的核心起点。 C语言有个硬性规定：所有可执行程序都必须有且仅有一个<code>main()</code>函数，这就是程序的入口。</p><blockquote><p>这部分实际上有多种写法：</p><ol type="1"><li><p><code>int main(void)</code>: 无参数，返回int类型（标准写法）</p></li><li><p><code>int main(int argc, char *argv[])</code>: 带参数，返回int类型（应该是在工程中的常用写法）</p></li><li><p><code>signed main()</code>: 与<code>int main()</code>相同，返回int类型. 一般在算法竞赛中，在使用了<code>#define int long long</code>后，才会使用。（具体原因，后面会作解释）</p></li><li><p><code>void main()</code>: 无返回值（最常见的非标准写法） <strong>(不建议使用)</strong></p></li><li><p><code>main()</code>: 省略返回值类型（旧标准兼容写法） <strong>(不建议使用)</strong></p></li></ol></blockquote><hr><h4 id="代码块">2. <code>{ ... }</code>：代码块</h4><p><code>main()</code>后面的一对大括号<code>{ }</code>，划定了这个入口函数的代码块范围，意思是：所有在<code>{ }</code>里的代码，都将被视为<code>main()</code>函数的一部分，会被顺序执行。</p><p>我们想让电脑做的所有操作（比如输出文字，或者数学运算），都必须写在这对大括号之间。</p><p>并不只是函数后面需要放代码块，其他的一些关键字后也要放，比如<code>if</code>、<code>for</code>、<code>while</code>等，后面会详细介绍。</p><hr><h4 id="printfhello-worldn实现输出功能的核心指令">3. <code>printf("Hello, World!\n");</code>：实现输出功能的核心指令</h4><p>我们的目标是在屏幕上打印“Hello, World!”这句话</p><ul><li>而<code>printf()</code>正是C语言用来格式化输出的工具（<code>print</code>=打印，<code>f</code>=format，即格式化）。</li><li>括号里的<code>"Hello, World!\n"</code>是要输出的内容（双引号包裹的是“字符串”）。</li><li>末尾的<code>\n</code>是换行符，能让输出后光标自动换行。</li><li>最后必须加<code>;</code>，这是C语言的“语句结束符”，告诉电脑“这条指令到这就完了”。</li></ul><hr><h4 id="include-stdio.hprintf的声明">4. <code>#include &lt;stdio.h&gt;</code>：<code>printf()</code>的声明</h4><p>电脑不会凭空认识<code>printf()</code>函数，因为它不是C语言的“内置默认功能”，而是在C语言“标准输入输出库”（简称stdio库）里的工具。</p><p><code>#include</code>是C语言的预处理指令，作用相当于复制粘贴：在编译之前，<code>#include &lt;stdio.h&gt;</code>会<strong>在编译的时候</strong>把stdio头文件的所有内容（包含<code>printf()</code>的函数声明、使用规则）链接到当前程序中，告诉电脑：<code>printf()</code>是合法工具，该怎么调用它。</p><p>如果少了这一行，电脑会不认识<code>printf()</code>，程序就会报错。</p><hr><h4 id="return-0函数的结束信号">5. <code>return 0;</code>：函数的“结束信号”</h4><p>回到<code>main()</code>函数开头的<code>int</code>：<code>return 0;</code>就是履行这个约定。</p><p>当<code>main()</code>函数里的所有指令都执行完后，会向操作系统返回一个“0”，表示告诉系统：“这个程序正常执行完毕，没有出错”。</p><p>实际上，从C++11开始，<code>return 0;</code>可以不用写，因为编译器会隐式插入 <code>return 0;</code>，等价于显式书写。（但是这并不代表其他函数也不用return，这只是因为 main 函数比较特殊而已）</p><hr><p>经过上面部分的学习，相信你一定清楚了一个基本的C程序需要包含什么东西了，希望这篇文章能帮助你入门C语言。</p>]]></content>
    
    
      
      
    <summary type="html">&lt;p&gt;大家好！这里是杰杰酱，以下内容有需要补充的，或者大家有什么意见或者建议，欢迎在评论区留言！ 如果看到我会更新的，欢迎大家批评指正！&lt;/p&gt;
&lt;hr&gt;
&lt;div style=&quot;background-color: #f5fafe; border-radius: 8px; p</summary>
      
    
    
    
    <category term="C语言教学" scheme="https://jiejiejiang2004.github.io/categories/C%E8%AF%AD%E8%A8%80%E6%95%99%E5%AD%A6/"/>
    
    
    <category term="C" scheme="https://jiejiejiang2004.github.io/tags/C/"/>
    
  </entry>
  
  <entry>
    <title>哈尔滨CCPC前有感</title>
    <link href="https://jiejiejiang2004.github.io/2025/12/05/%E5%93%88%E5%B0%94%E6%BB%A8CCPC%E5%89%8D%E6%9C%89%E6%84%9F/"/>
    <id>https://jiejiejiang2004.github.io/2025/12/05/%E5%93%88%E5%B0%94%E6%BB%A8CCPC%E5%89%8D%E6%9C%89%E6%84%9F/</id>
    <published>2025-12-05T06:06:44.000Z</published>
    <updated>2025-12-05T10:24:55.951Z</updated>
    
    <content type="html"><![CDATA[<figure><img src="/2025/12/05/%E5%93%88%E5%B0%94%E6%BB%A8CCPC%E5%89%8D%E6%9C%89%E6%84%9F//在飞机上.jpg" alt="在飞机上"><figcaption aria-hidden="true">在飞机上</figcaption></figure><p>现在我是在飞往哈尔滨的飞机上(当时写的)，有感而发，然后记录下来。</p><span id="more"></span><p>我上一次坐飞机，是在我初二的时候。那个年纪的我，和高中的我，和现在的我，对事物的心态，是截然不同的。</p><p>当时的我，年岁尚浅，未识世界万千，初中的知识储备，本来也没多少，掌握这些自然是不在话下，便以为自己学富五车，面对问题胸有“成竹”，带有一种虚假的自信。为什么说是虚假的呢，因为这种自信根基于我对我所学知识的掌控能力，当时的知识面不广，知识深度也不算很深，所以对他们的掌控力很强(但也仅限于此)，自然自信。</p><p>等到高中的时候，一开始我对自己还是很有自信的，为什么呢，原因很简单，因为我对知识的广度和深度的认知还停留在初中时期，我以为我在高中依然能很好地掌控他 —— 当然现实并非如此，我的成绩并没有很好的起色，同时当时我也做出了一些不成熟的行为，并没有意识到这一点。当这一层壁垒被打破的时候，没有意识到它被打破的这个现象是极其危险的，因为你对接下来面对的挑战没有半点准备(这一点不仅体现在任何学科的学习上，也包括人际关系)。好的，当然我也没有这么弱，后面还是意识到了这个变化，意识到曾经手拿把掐的东西脱离了我的掌控，好就好在，学习方面，只是广度和深度增加了，但是知识结构没有变化(至少没有像大学这样变化这么大，还是语数英物化生的一些基础知识)，尚可用以前的办法应付(但是因为学科增加了，略有吃力)，但是在人际上，很明显以往的方法和态度是不正确的，是错误的，但是我对这样一个虚无的事物并没有一个比较清晰的描摹，以致于一直在回避面对这个未知的事物。在这里要特别感谢我高中的舍友以及在这一点上一直在指引我的朋友，没有他们，现在的我必然还是浑浑噩噩的。</p><p>就这样过了三年，我来到了大学学习计算机。还记得当时高二的时候，我当时的同桌(曾经的oi✌🏻，现在是中大✌🏻)跟我简单普及了一点点算法的知识(当时以为这就是计算机)，算是给我埋下了一颗读计算机的种子吧，然后这颗种子在高考结束后发芽了。其实当时我对计算机的认识还是错误的，狭隘的，不够深刻的，但是当时我以为新的壁垒到这就结束了(现在看来，其实真的是无止境啊)。</p><p>人生本就是一场走走停停的旅途，没有一种永恒不变的模式可以帮助我们面对一切局面，你眼中的天边，或许不过是别人严重的一个小小的井口。但是也不能妄自菲薄，如果连自己都不能够相信，大概也就只能到这里了罢。</p><p>如果能给我一次与小时候的我对话的机会，我大概会这么说吧。</p>]]></content>
    
    
    <summary type="html">&lt;figure&gt;
&lt;img src=&quot;/2025/12/05/%E5%93%88%E5%B0%94%E6%BB%A8CCPC%E5%89%8D%E6%9C%89%E6%84%9F//在飞机上.jpg&quot; alt=&quot;在飞机上&quot;&gt;&lt;figcaption aria-hidden=&quot;true&quot;&gt;在飞机上&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p&gt;现在我是在飞往哈尔滨的飞机上(当时写的)，有感而发，然后记录下来。&lt;/p&gt;</summary>
    
    
    
    <category term="感想" scheme="https://jiejiejiang2004.github.io/categories/%E6%84%9F%E6%83%B3/"/>
    
    
    <category term="CCPC" scheme="https://jiejiejiang2004.github.io/tags/CCPC/"/>
    
  </entry>
  
  <entry>
    <title>C/C++IDE介绍之DevC++</title>
    <link href="https://jiejiejiang2004.github.io/2025/12/04/C_C++IDE%E4%BB%8B%E7%BB%8D%E4%B9%8BDevC++/"/>
    <id>https://jiejiejiang2004.github.io/2025/12/04/C_C++IDE%E4%BB%8B%E7%BB%8D%E4%B9%8BDevC++/</id>
    <published>2025-12-03T18:04:20.000Z</published>
    <updated>2025-12-05T10:24:07.131Z</updated>
    
    <content type="html"><![CDATA[<p>DevC++ 是一个基于MinGW的C/C++集成开发环境（IDE），它提供了一个简单而强大的界面，用于编写、编译和调试C/C++程序。</p><span id="more"></span><h2 id="下载与安装">下载与安装</h2><ol type="1"><li>下载源<ol type="1"><li><a href="https://bloodshed-dev-c.en.softonic.com/">Dev-C++官方网站</a></li><li><a href="https://sourceforge.net/projects/orwelldevcpp/">SourceForge</a></li><li><a href="https://pc.qq.com/detail/16/detail_163136.html">腾讯软件中心</a></li></ol></li></ol><p>以上下载源中，官方网站似乎上不去了，SourceForge似乎需要魔法，而且下载速度不快。实在不行的话腾讯源也可以，记得选<strong>直接下载</strong>就好了。</p><ol start="2" type="1"><li><p><strong>版本选择</strong>：实际上官方最新版5.11早在2017就停止更新（48.1MB）</p></li><li><p><strong>安装步骤</strong>：</p><p><img src="/2025/12/04/C_C++IDE%E4%BB%8B%E7%BB%8D%E4%B9%8BDevC++//DevC++_01.png" alt="Dev-C++安装界面"> 这里没有中文选项，直接点击OK即可 <img src="/2025/12/04/C_C++IDE%E4%BB%8B%E7%BB%8D%E4%B9%8BDevC++//DevC++_02.png" alt="Dev-C++安装界面"> 选择I Agree <img src="/2025/12/04/C_C++IDE%E4%BB%8B%E7%BB%8D%E4%B9%8BDevC++//DevC++_03.png" alt="Dev-C++安装界面"> 不用理会，直接Next <img src="/2025/12/04/C_C++IDE%E4%BB%8B%E7%BB%8D%E4%B9%8BDevC++//DevC++_04.png" alt="Dev-C++安装界面"> 选择默认安装路径（这里不建议默认，建议安装在其他盘：比如D盘或者E盘，实在不行也尽量安装在C:\Users\用户名\ 下，不建议安装在C:\Program File 下） 点击Install 等待安装完成 <img src="/2025/12/04/C_C++IDE%E4%BB%8B%E7%BB%8D%E4%B9%8BDevC++//DevC++_05.png" alt="Dev-C++安装界面"> 点击Finish（圈内的可选可不选，选了就是直接打开Dev C++而已） 完成安装</p></li></ol><h2 id="首次配置">首次配置</h2><p><img src="/2025/12/04/C_C++IDE%E4%BB%8B%E7%BB%8D%E4%B9%8BDevC++//DevC++_06.png" alt="Dev-C++配置"> 这里可以选择简体中文 点击Next <img src="/2025/12/04/C_C++IDE%E4%BB%8B%E7%BB%8D%E4%B9%8BDevC++//DevC++_07.png" alt="Dev-C++配置"> 这里可以不做修改，也可以选择你喜欢的字体和配色 点击Next <img src="/2025/12/04/C_C++IDE%E4%BB%8B%E7%BB%8D%E4%B9%8BDevC++//DevC++_08.png" alt="Dev-C++配置"> 点击OK</p><p>然后就可以开始使用啦！</p><h3 id="基本使用">基本使用</h3><ol type="1"><li><p><strong>创建新项目/文件</strong>：</p><ol type="1"><li><p>入口1 点击工具条左侧按钮 <img src="/2025/12/04/C_C++IDE%E4%BB%8B%E7%BB%8D%E4%B9%8BDevC++//DevC++_09.png" alt="Dev-C++新建文件"></p></li><li><p>入口2 点击「文件」→「新建」→「项目…」 <img src="/2025/12/04/C_C++IDE%E4%BB%8B%E7%BB%8D%E4%B9%8BDevC++//DevC++_10.png" alt="Dev-C++新建文件"></p></li></ol></li><li><p>由于我一般使用Dev C++只用于算法竞赛，因此我只介绍单文件的创建。（一般如果是C++项目的话，建议使用Visual Studio 或 Clion） <img src="/2025/12/04/C_C++IDE%E4%BB%8B%E7%BB%8D%E4%B9%8BDevC++//DevC++_11.png" alt="Dev-C++使用区域"> 一般我们就直接使用，直接在代码区里面编码即可。 编写完代码之后可以点击编译、运行，查看输出结果；也可以直接点击编译运行。</p></li><li><p>常用快捷键</p></li></ol><ul><li><strong>F9</strong>：编译</li><li><strong>F10</strong>：运行</li><li><strong>F11</strong>：编译并运行</li><li><strong>F5</strong>：调试</li><li><strong>Ctrl+N</strong>：新建文件</li><li><strong>Ctrl+O</strong>：打开文件</li><li><strong>Ctrl+S</strong>：保存文件</li></ul>]]></content>
    
    
    <summary type="html">&lt;p&gt;DevC++ 是一个基于MinGW的C/C++集成开发环境（IDE），它提供了一个简单而强大的界面，用于编写、编译和调试C/C++程序。&lt;/p&gt;</summary>
    
    
    
    
    <category term="C++" scheme="https://jiejiejiang2004.github.io/tags/C/"/>
    
    <category term="IDE" scheme="https://jiejiejiang2004.github.io/tags/IDE/"/>
    
    <category term="DevC++" scheme="https://jiejiejiang2004.github.io/tags/DevC/"/>
    
  </entry>
  
  <entry>
    <title>现在开始，还来得及</title>
    <link href="https://jiejiejiang2004.github.io/2025/10/29/top/"/>
    <id>https://jiejiejiang2004.github.io/2025/10/29/top/</id>
    <published>2025-10-28T16:00:00.000Z</published>
    <updated>2025-12-03T18:44:48.518Z</updated>
    
    <content type="html"><![CDATA[<p><strong>2025年12月4日 02:42:22</strong></p><p>明天晚上就是Python考试了，8号还有一场Springboot考试，13号还有一场六级</p><p>www时间怎么过得这么快啊</p><p>要抓紧时间复习了QWQ</p><span id="more"></span><p><strong>2025-10-29 23:12:17</strong></p><p>今天花了一天，用hexo模板搭了个简单的博客。</p><p>只是做了一件，想做很久，很久以前就应该做的事情。</p><p>其实这个博客还有很多地方没有完善</p><p>能力有限，夜深了，明天再做吧</p><p>in queue…</p>]]></content>
    
    
    <summary type="html">&lt;p&gt;&lt;strong&gt;2025年12月4日 02:42:22&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;明天晚上就是Python考试了，8号还有一场Springboot考试，13号还有一场六级&lt;/p&gt;
&lt;p&gt;www时间怎么过得这么快啊&lt;/p&gt;
&lt;p&gt;要抓紧时间复习了QWQ&lt;/p&gt;</summary>
    
    
    
    
  </entry>
  
  <entry>
    <title>Fenwick 树状数组</title>
    <link href="https://jiejiejiang2004.github.io/2025/10/29/%E6%A0%91%E7%8A%B6%E6%95%B0%E7%BB%84Fenwick/"/>
    <id>https://jiejiejiang2004.github.io/2025/10/29/%E6%A0%91%E7%8A%B6%E6%95%B0%E7%BB%84Fenwick/</id>
    <published>2025-10-28T16:00:00.000Z</published>
    <updated>2025-10-29T15:27:32.428Z</updated>
    
    <content type="html"><![CDATA[<h1 id="fenwick-树状数组">Fenwick 树状数组</h1><p><strong>原理</strong></p><p><strong>1.</strong> <strong>简单题</strong></p><p><a href="#1"><strong>洛谷 P3374 【模板】树状数组 1</strong></a></p><p><a href="#2"><strong>洛谷 P3368 【模板】树状数组 2</strong></a></p><p><a href="#3"><strong>洛谷 P5057 [CQOI2006] 简单题</strong></a></p><p><a href="#4"><strong>洛谷 P2068 统计和</strong></a></p><p><a href="#5"><strong>洛谷 P4939 Agent2</strong></a></p><span id="more"></span><p><a href="#6"><strong>洛谷 P2880 [USACO07JAN] Balanced Lineup G</strong></a></p><p><a href="#7"><strong>洛谷 P6225 [eJOI 2019] 异或橙子</strong></a></p><p><a href="#8"><strong>洛谷 P1908 逆序对</strong></a></p><p><a href="#9"><strong>洛谷 P1774 最接近神的人</strong></a></p><p><a href="#10"><strong>洛谷 P4378 [USACO18OPEN] Out of Sorts S</strong></a></p><p><strong>2.中等题</strong></p><p><strong><a href="#11">洛谷 P2357 守墓人</a></strong></p><h1 id="原理">原理</h1><h1 id="luogu-p3374-模板树状数组-1"><a href="https://www.luogu.com.cn/problem/P3374">luogu P3374 【模板】树状数组 1</a><a id="1"></a></h1><h5 id="题面描述"><strong>题面描述：</strong></h5><p>已知一个数列，你需要进行下面两种操作：</p><ul><li>将某一个数加上 <span class="math inline"><em>x</em></span>；</li><li>求出某区间每一个数的和。</li></ul><h5 id="代码"><strong>代码</strong></h5><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="meta">#<span class="keyword">define</span> int long long</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> lowbit(x) ((x)&amp;-(x))</span></span><br><span class="line"></span><br><span class="line"><span class="type">const</span> <span class="type">int</span> N = <span class="number">1e6</span> + <span class="number">10</span>;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> n,m;</span><br><span class="line"><span class="type">int</span> tree[N];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">update</span><span class="params">(<span class="type">int</span> x,<span class="type">int</span> d)</span> </span>&#123;</span><br><span class="line"><span class="keyword">while</span>(x &lt;= n) &#123;</span><br><span class="line">tree[x] += d;</span><br><span class="line">x += <span class="built_in">lowbit</span>(x);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">del</span><span class="params">(<span class="type">int</span> x,<span class="type">int</span> d)</span> </span>&#123;</span><br><span class="line"><span class="keyword">while</span>(x &gt; <span class="number">0</span>) &#123;</span><br><span class="line">tree[x] -= d;</span><br><span class="line">x -= <span class="built_in">lowbit</span>(x);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">fin</span><span class="params">(<span class="type">int</span> x)</span> </span>&#123;</span><br><span class="line"><span class="type">int</span> re = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">while</span>(x) &#123;</span><br><span class="line">re += tree[x];</span><br><span class="line">x -= <span class="built_in">lowbit</span>(x);</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> re;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">signed</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">cin &gt;&gt; n &gt;&gt; m;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">1</span> ; i &lt;= n ; i ++) &#123;</span><br><span class="line"><span class="type">int</span> num;</span><br><span class="line">cin &gt;&gt; num;</span><br><span class="line"><span class="built_in">update</span>(i,num);</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">0</span> ; i &lt; m ; i ++) &#123;</span><br><span class="line"><span class="type">int</span> op;</span><br><span class="line">cin &gt;&gt; op;</span><br><span class="line"><span class="keyword">if</span>(op == <span class="number">1</span>) &#123;</span><br><span class="line"><span class="type">int</span> x,d;</span><br><span class="line">cin &gt;&gt; x &gt;&gt; d;</span><br><span class="line"><span class="built_in">update</span>(x,d);</span><br><span class="line">&#125; <span class="keyword">else</span> &#123;</span><br><span class="line"><span class="type">int</span> st,en;</span><br><span class="line">cin &gt;&gt; st &gt;&gt; en;</span><br><span class="line">cout &lt;&lt; <span class="built_in">fin</span>(en) - <span class="built_in">fin</span>(st<span class="number">-1</span>)&lt;&lt; <span class="string">&quot;\n&quot;</span>;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h1 id="luogu-p3368-模板树状数组-2"><a href="https://www.luogu.com.cn/problem/P3368">luogu P3368 【模板】树状数组 2</a><a id="2"></a></h1><p><strong>题面描述：</strong></p><p>已知一个数列，你需要进行下面两种操作：</p><ol type="1"><li>将某区间每一个数加上 <span class="math inline"><em>x</em></span>；</li><li>求出某一个数的值。</li></ol><p><strong>解题思路：</strong></p><p>其实这道题和前面那道模板题本质上是一样的，只需要对数列初始的时候进行前缀和，然后就能利用差分操作进行快速的区间加法操作和单点查询操作了</p><p>这也是很经典的利用树状数组优化前缀和差分的操作了。</p><p><strong>代码：</strong></p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="meta">#<span class="keyword">define</span> int long long</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> lowbit(x) ((x)&amp;-(x)) </span></span><br><span class="line"></span><br><span class="line"><span class="type">const</span> <span class="type">int</span> N = <span class="number">1e6</span> + <span class="number">10</span>;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> n,m,old = <span class="number">0</span>;</span><br><span class="line"><span class="type">int</span> tree[N];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">update</span><span class="params">(<span class="type">int</span> x,<span class="type">int</span> d)</span> </span>&#123;</span><br><span class="line"><span class="keyword">while</span>(x &lt;= n) &#123;</span><br><span class="line">tree[x] += d;</span><br><span class="line">x += <span class="built_in">lowbit</span>(x);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">del</span><span class="params">(<span class="type">int</span> x,<span class="type">int</span> d)</span> </span>&#123;</span><br><span class="line"><span class="keyword">while</span>(x &gt; <span class="number">0</span>) &#123;</span><br><span class="line">tree[x] -= d;</span><br><span class="line">x -= <span class="built_in">lowbit</span>(x);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">fin</span><span class="params">(<span class="type">int</span> x)</span> </span>&#123;</span><br><span class="line"><span class="type">int</span> re = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">while</span>(x) &#123;</span><br><span class="line">re += tree[x];</span><br><span class="line">x -= <span class="built_in">lowbit</span>(x);</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> re;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">signed</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">cin &gt;&gt; n &gt;&gt; m;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">1</span> ; i &lt;= n ; i ++) &#123;</span><br><span class="line"><span class="type">int</span> num;</span><br><span class="line">cin &gt;&gt; num;</span><br><span class="line"><span class="built_in">update</span>(i,num-old);</span><br><span class="line">old = num;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">0</span> ; i &lt; m ; i ++) &#123;</span><br><span class="line"><span class="type">int</span> op;</span><br><span class="line">cin &gt;&gt; op;</span><br><span class="line"><span class="keyword">if</span>(op == <span class="number">1</span>) &#123;</span><br><span class="line"><span class="type">int</span> x,y,d;</span><br><span class="line">cin &gt;&gt; x &gt;&gt; y &gt;&gt; d;</span><br><span class="line"><span class="built_in">update</span>(x,d);</span><br><span class="line"><span class="built_in">update</span>(y<span class="number">+1</span>,d*(<span class="number">-1</span>));;</span><br><span class="line">&#125; <span class="keyword">else</span> &#123;</span><br><span class="line"><span class="type">int</span> x;</span><br><span class="line">cin &gt;&gt; x;</span><br><span class="line">cout &lt;&lt; <span class="built_in">fin</span>(x)&lt;&lt; <span class="string">&quot;\n&quot;</span>;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h1 id="luogu-p5057-cqoi2006-简单题"><a href="https://www.luogu.com.cn/problem/P5057">luogu P5057 [CQOI2006] 简单题</a><a id="3"></a></h1><p><strong>题面描述：</strong></p><p>有一个 <span class="math inline"><em>n</em></span> 个元素的数组，每个元素初始均为 <span class="math inline">0</span>。有 <span class="math inline"><em>m</em></span> 条指令，每条指令为两种操作中的一种：</p><ol type="1"><li>让其中一段连续序列数字反转；（即 <span class="math inline">0</span> 变 <span class="math inline">1</span>，<span class="math inline">1</span> 变 <span class="math inline">0</span>）</li><li>询问某个元素的值。</li></ol><p><strong>解题思路：</strong></p><p>实际上仍然是前缀和的思路，我们可以注意到，翻转奇数次就是 <span class="math inline">1</span> ，翻转偶数次就是 <span class="math inline">0</span> ， 所以我们只要用前缀和维护某个数反转了几次即可。</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> int long long</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> lowbit(x) (x&amp;-x)</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">Fenwick</span> &#123;</span><br><span class="line">    <span class="type">int</span> n;</span><br><span class="line">    std::vector&lt;T&gt; a;</span><br><span class="line"></span><br><span class="line">    <span class="built_in">Fenwick</span>(<span class="type">int</span> n_ = <span class="number">0</span>) &#123;</span><br><span class="line">        <span class="built_in">init</span>(n_);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="type">void</span> <span class="title">init</span><span class="params">(<span class="type">int</span> n_)</span> </span>&#123;</span><br><span class="line">        n = n_;</span><br><span class="line">        a.<span class="built_in">assign</span>(n, T&#123;&#125;);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="type">void</span> <span class="title">add</span><span class="params">(<span class="type">int</span> x, <span class="type">const</span> T &amp;v)</span> </span>&#123;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = x; i &lt;= n; i += i &amp; -i) &#123;</span><br><span class="line">            a[i - <span class="number">1</span>] = a[i - <span class="number">1</span>] + v;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="function">T <span class="title">sum</span><span class="params">(<span class="type">int</span> x)</span> </span>&#123;</span><br><span class="line">        T ans&#123;&#125;;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = x; i &gt; <span class="number">0</span>; i -= i &amp; -i) &#123;</span><br><span class="line">            ans = ans + a[i - <span class="number">1</span>];</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> ans;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="function">T <span class="title">rangeSum</span><span class="params">(<span class="type">int</span> l, <span class="type">int</span> r)</span> </span>&#123;</span><br><span class="line">        <span class="keyword">return</span> <span class="built_in">sum</span>(r) - <span class="built_in">sum</span>(l);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">select</span><span class="params">(<span class="type">const</span> T &amp;k)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> x = <span class="number">0</span>;</span><br><span class="line">        T cur&#123;&#125;; </span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span> &lt;&lt; std::__lg(n); i; i /= <span class="number">2</span>) &#123;</span><br><span class="line">            <span class="keyword">if</span> (x + i &lt;= n &amp;&amp; cur + a[x + i - <span class="number">1</span>] &lt;= k) &#123;</span><br><span class="line">                x += i;</span><br><span class="line">                cur = cur + a[x - <span class="number">1</span>];</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> x;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">signed</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    std::ios::<span class="built_in">sync_with_stdio</span>(<span class="literal">false</span>);</span><br><span class="line">    std::cin.<span class="built_in">tie</span>(<span class="literal">nullptr</span>);</span><br><span class="line">    std::cout.<span class="built_in">tie</span>(<span class="literal">nullptr</span>);</span><br><span class="line"></span><br><span class="line">    <span class="type">int</span> n,m;</span><br><span class="line">    std::cin &gt;&gt; n &gt;&gt; m;</span><br><span class="line">    <span class="function">Fenwick&lt;<span class="type">int</span>&gt; <span class="title">f</span><span class="params">(n<span class="number">+2</span>)</span></span>;</span><br><span class="line">    <span class="keyword">while</span>(m--) &#123;</span><br><span class="line">        <span class="type">int</span> op;</span><br><span class="line">        std::cin &gt;&gt; op;</span><br><span class="line">        <span class="keyword">if</span>(op == <span class="number">1</span>) &#123;</span><br><span class="line">            <span class="type">int</span> l,r;</span><br><span class="line">            std::cin &gt;&gt; l &gt;&gt; r;</span><br><span class="line">            f.<span class="built_in">add</span>(l,<span class="number">1</span>);</span><br><span class="line">            f.<span class="built_in">add</span>(r<span class="number">+1</span>,<span class="number">-1</span>);</span><br><span class="line">        &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">            <span class="type">int</span> i;</span><br><span class="line">            std::cin &gt;&gt; i;</span><br><span class="line">            std::cout &lt;&lt; ((f.<span class="built_in">sum</span>(i) &amp; <span class="number">1</span>) == <span class="number">0</span> ? <span class="number">0</span> : <span class="number">1</span>) &lt;&lt; <span class="string">&quot;\n&quot;</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h1 id="luogu-p2068-统计和"><a href="https://www.luogu.com.cn/problem/P2068">luogu P2068 统计和</a><a id="4"></a></h1><p><strong>题面描述：</strong></p><p>给定一个长度为 <span class="math inline"><em>n</em>(0 ≤ <em>n</em> ≤ 10<sup>5</sup>)</span>，初始值都为 <span class="math inline">0</span> 的序列，<span class="math inline"><em>x</em>(0 ≤ <em>x</em> ≤ 10<sup>5</sup>)</span> 次的修改某些位置上的数字，每次加上一个数，并在此期间提出 <span class="math inline"><em>y</em>(0 ≤ <em>y</em> ≤ 10<sup>5</sup>)</span> 个问题，求每段区间的和。</p><p><strong>解题思路：</strong></p><p>这题实际上就是经典的 <strong>单点修改</strong> + <strong>区间查询</strong> ， 区间查询可以从前缀和演变过来，两个一前一后的前缀和相减之后，得到的就是区间和了</p><p><strong>代码：</strong></p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="keyword">using</span> <span class="keyword">namespace</span> std;</span><br><span class="line"><span class="meta">#<span class="keyword">define</span> int long long </span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> lowbit(x) ((x)&amp;-(x))</span></span><br><span class="line"></span><br><span class="line"><span class="type">const</span> <span class="type">int</span> N = <span class="number">1e6</span> + <span class="number">10</span>;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> n,w;</span><br><span class="line"><span class="type">int</span> tree[N];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">update</span><span class="params">(<span class="type">int</span> x,<span class="type">int</span> d)</span> </span>&#123;</span><br><span class="line"><span class="keyword">while</span>(x &lt;= n) &#123;</span><br><span class="line">tree[x] += d;</span><br><span class="line">x += <span class="built_in">lowbit</span>(x);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">fin</span><span class="params">(<span class="type">int</span> x)</span> </span>&#123;</span><br><span class="line"><span class="type">int</span> re = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">while</span>(x) &#123;</span><br><span class="line">re += tree[x];</span><br><span class="line">x -= <span class="built_in">lowbit</span>(x);</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> re;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">signed</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">cin &gt;&gt; n &gt;&gt; w;</span><br><span class="line"><span class="keyword">while</span>(w--) &#123;</span><br><span class="line"><span class="type">char</span> op;</span><br><span class="line">cin &gt;&gt; op;</span><br><span class="line"><span class="keyword">if</span>(op == <span class="string">&#x27;x&#x27;</span>) &#123;</span><br><span class="line"><span class="type">int</span> x,d;</span><br><span class="line">cin &gt;&gt; x &gt;&gt; d;</span><br><span class="line"><span class="built_in">update</span>(x,d);</span><br><span class="line">&#125; <span class="keyword">else</span> &#123;</span><br><span class="line"><span class="type">int</span> x,y;</span><br><span class="line">cin &gt;&gt; x &gt;&gt; y;</span><br><span class="line">cout &lt;&lt; <span class="built_in">fin</span>(y) - <span class="built_in">fin</span>(x<span class="number">-1</span>) &lt;&lt; <span class="string">&quot;\n&quot;</span>;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h1 id="luogu-p4939-agent2"><a href="https://www.luogu.com.cn/problem/P4939">luogu P4939 Agent2</a><a id="5"></a></h1><p><strong>题面描述：</strong></p><p>在一个时间长度为 <span class="math inline"><em>N</em></span> 天的行动中，指挥对你下达了 <span class="math inline"><em>M</em></span> 条命令操作，命令操作如下：</p><ol type="1"><li>输入 <span class="math inline">0, <em>a</em>, <em>b</em></span>，这代表在第 <span class="math inline"><em>a</em></span> 天到第 <span class="math inline"><em>b</em></span> 天，有一名 队员要行动。</li><li>输入 <span class="math inline">1</span> <span class="math inline"><em>a</em></span>，这代表 指挥询问你根据目前的信息，在第 <span class="math inline"><em>a</em></span> 天有多少名队员要行动。</li></ol><p><strong>解题思路：</strong></p><p>实际上就是对差分数组进行 <strong>单点修改</strong> 和 <strong>用前缀和操作进行查询</strong> 的经典操作</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> int long long</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> all(x) x.begin(),x.end()</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> all1(x) x.begin()+1,x.end()</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> lowbit(x) (x&amp;-x)</span></span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">Fenwick</span> &#123;</span><br><span class="line">    <span class="type">int</span> n;</span><br><span class="line">    std::vector&lt;T&gt; a;</span><br><span class="line"></span><br><span class="line">    <span class="built_in">Fenwick</span>(<span class="type">int</span> n_ = <span class="number">0</span>) &#123;</span><br><span class="line">        <span class="built_in">init</span>(n_);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="type">void</span> <span class="title">init</span><span class="params">(<span class="type">int</span> n_)</span> </span>&#123;</span><br><span class="line">        n = n_;</span><br><span class="line">        a.<span class="built_in">assign</span>(n, T&#123;&#125;);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="type">void</span> <span class="title">add</span><span class="params">(<span class="type">int</span> x, <span class="type">const</span> T &amp;v)</span> </span>&#123;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = x; i &lt;= n; i += i &amp; -i) &#123;</span><br><span class="line">            a[i - <span class="number">1</span>] = a[i - <span class="number">1</span>] + v;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="function">T <span class="title">sum</span><span class="params">(<span class="type">int</span> x)</span> </span>&#123;</span><br><span class="line">        T ans&#123;&#125;;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = x; i &gt; <span class="number">0</span>; i -= i &amp; -i) &#123;</span><br><span class="line">            ans = ans + a[i - <span class="number">1</span>];</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> ans;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="function">T <span class="title">rangeSum</span><span class="params">(<span class="type">int</span> l, <span class="type">int</span> r)</span> </span>&#123;</span><br><span class="line">        <span class="keyword">return</span> <span class="built_in">sum</span>(r) - <span class="built_in">sum</span>(l);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="type">int</span> <span class="title">select</span><span class="params">(<span class="type">const</span> T &amp;k)</span> </span>&#123;</span><br><span class="line">        <span class="type">int</span> x = <span class="number">0</span>;</span><br><span class="line">        T cur&#123;&#125;; </span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = <span class="number">1</span> &lt;&lt; std::__lg(n); i; i /= <span class="number">2</span>) &#123;</span><br><span class="line">            <span class="keyword">if</span> (x + i &lt;= n &amp;&amp; cur + a[x + i - <span class="number">1</span>] &lt;= k) &#123;</span><br><span class="line">                x += i;</span><br><span class="line">                cur = cur + a[x - <span class="number">1</span>];</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> x;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">signed</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    std::ios::<span class="built_in">sync_with_stdio</span>(<span class="literal">false</span>);</span><br><span class="line">    std::cin.<span class="built_in">tie</span>(<span class="literal">nullptr</span>);</span><br><span class="line">    std::cout.<span class="built_in">tie</span>(<span class="literal">nullptr</span>);</span><br><span class="line"></span><br><span class="line">    </span><br><span class="line">    <span class="type">int</span> n,m;</span><br><span class="line">    std::cin &gt;&gt; n &gt;&gt; m;</span><br><span class="line">    <span class="function">Fenwick&lt;<span class="type">int</span>&gt; <span class="title">f</span><span class="params">(n<span class="number">+2</span>)</span></span>;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">while</span>(m--) &#123;</span><br><span class="line">        <span class="type">int</span> op;</span><br><span class="line">        std::cin &gt;&gt; op;</span><br><span class="line">        <span class="keyword">if</span>(op == <span class="number">0</span>) &#123;</span><br><span class="line">            <span class="type">int</span> a,b;</span><br><span class="line">            std::cin &gt;&gt; a &gt;&gt; b;</span><br><span class="line">            f.<span class="built_in">add</span>(a,<span class="number">1</span>);</span><br><span class="line">            f.<span class="built_in">add</span>(b<span class="number">+1</span>,<span class="number">-1</span>);</span><br><span class="line">        &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">            <span class="type">int</span> a;</span><br><span class="line">            std::cin &gt;&gt; a;</span><br><span class="line">            std::cout &lt;&lt; f.<span class="built_in">sum</span>(a) &lt;&lt; <span class="string">&quot;\n&quot;</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h1 id="luogu-p2880-usaco07jan-balanced-lineup-g"><a href="https://www.luogu.com.cn/problem/P2880">luogu P2880 [USACO07JAN] Balanced Lineup G</a><a id="6"></a></h1><p><strong>题面描述：</strong></p><p>给你一个长度为 <span class="math inline"><em>n</em></span> 的序列，询问 <span class="math inline"><em>q</em></span> 次，每次询问给你 <span class="math inline"><em>a</em>、<em>b</em></span> ，要求你给出序列区间 <span class="math inline"><em>a</em>、<em>b</em></span> 中的极差</p><p><strong>解题思路：</strong></p><p>实际上我们需要使用树状数组来维护区间最大值和区间最小值。</p><p><strong>更新操作原理</strong>：</p><ul><li>首先将当前位置<code>x</code>的值设为<code>d</code></li><li>然后更新当前节点的兄弟节点信息（在同一个父节点下的其他节点）</li><li>最后通过不断加上<code>lowbit(x)</code>更新所有包含该节点的父节点</li></ul><p><strong>查询操作原理</strong>：</p><ul><li>从右往左遍历区间 <span class="math inline">[<em>y</em>, <em>x</em>]</span></li><li>对于无法被树状数组覆盖的部分，直接比较原始数组的值</li><li>对于能够被树状数组覆盖的区间，利用树状数组查询该区间的最大值</li></ul><p><strong>PS: </strong> 感觉区间最值维护的题目，不修改的不如上 ST表，带修改的不如上线段树，树状数组有点神秘了</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;map&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> lowbit(x) ((x)&amp;-(x))</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> int long long</span></span><br><span class="line"></span><br><span class="line"><span class="type">const</span> <span class="type">int</span> N = <span class="number">1e6</span>;</span><br><span class="line"><span class="type">int</span> n,q;</span><br><span class="line"><span class="type">int</span> treeX[N],treeN[N],num[N];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">UpdateMax</span><span class="params">(<span class="type">int</span> x , <span class="type">int</span> d)</span> </span>&#123;</span><br><span class="line">treeX[x] = d;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">1</span> ; i &lt; <span class="built_in">lowbit</span>(x) ; i &lt;&lt;= <span class="number">1</span>) &#123;</span><br><span class="line">treeX[x] = std::<span class="built_in">max</span>(treeX[x] , treeX[x-i]);</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">while</span>(x &lt;= n) &#123;</span><br><span class="line">treeX[x] = std::<span class="built_in">max</span>(treeX[x] , d);</span><br><span class="line">x += <span class="built_in">lowbit</span>(x);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">UpdateMin</span><span class="params">(<span class="type">int</span> x , <span class="type">int</span> d)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">treeN[x] = d;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">1</span> ; i &lt; <span class="built_in">lowbit</span>(x) ; i &lt;&lt;= <span class="number">1</span>)</span><br><span class="line">&#123;</span><br><span class="line">treeN[x] = std::<span class="built_in">min</span>(treeN[x] , treeN[x-i]);</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">while</span>(x &lt;= n)</span><br><span class="line">&#123;</span><br><span class="line">treeN[x] = std::<span class="built_in">min</span>(treeN[x] , d);</span><br><span class="line">x += <span class="built_in">lowbit</span>(x);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">FindMax</span><span class="params">(<span class="type">int</span> x,<span class="type">int</span> y)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line"><span class="type">int</span> re = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">while</span>(x &gt;= y)</span><br><span class="line">&#123;</span><br><span class="line">re = std::<span class="built_in">max</span>(re , num[x]);</span><br><span class="line">x--;</span><br><span class="line"><span class="keyword">while</span>(x - y &gt; <span class="built_in">lowbit</span>(x))</span><br><span class="line">&#123;</span><br><span class="line">re = std::<span class="built_in">max</span>(re , treeX[x]);</span><br><span class="line">x -= <span class="built_in">lowbit</span>(x);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> re;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">FindMin</span><span class="params">(<span class="type">int</span> x,<span class="type">int</span> y)</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line"><span class="keyword">if</span>(x == y) <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line"><span class="type">int</span> re = <span class="number">1e16</span>;</span><br><span class="line"><span class="keyword">while</span>(x &gt;= y)</span><br><span class="line">&#123;</span><br><span class="line">re = std::<span class="built_in">min</span>(re , num[x]);</span><br><span class="line">x--;</span><br><span class="line"><span class="keyword">while</span>(x - y &gt; <span class="built_in">lowbit</span>(x))</span><br><span class="line">&#123;</span><br><span class="line">re = std::<span class="built_in">min</span>(re , treeN[x]);</span><br><span class="line">x -= <span class="built_in">lowbit</span>(x);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> re;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">signed</span> <span class="title">main</span><span class="params">()</span></span></span><br><span class="line"><span class="function"></span>&#123;</span><br><span class="line">std::cin &gt;&gt; n &gt;&gt; q;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">1</span> ; i &lt;= n;i ++)</span><br><span class="line">&#123;</span><br><span class="line">std::cin &gt;&gt; num[i];</span><br><span class="line"><span class="built_in">UpdateMax</span>(i , num[i]);</span><br><span class="line"><span class="built_in">UpdateMin</span>(i , num[i]);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">0</span> ; i &lt; q ; i ++)</span><br><span class="line">&#123;</span><br><span class="line"><span class="type">int</span> a,b;</span><br><span class="line">std::cin &gt;&gt; a &gt;&gt; b;</span><br><span class="line"><span class="keyword">if</span>(a!=b)</span><br><span class="line">std::cout &lt;&lt; <span class="built_in">FindMax</span>(b,a) - <span class="built_in">FindMin</span>(b,a) &lt;&lt; <span class="string">&quot;\n&quot;</span>;</span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">std::cout &lt;&lt; <span class="number">0</span> &lt;&lt; <span class="string">&quot;\n&quot;</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h1 id="luogu-p6225-ejoi-2019-异或橙子"><a href="https://www.luogu.com.cn/problem/P6225">luogu P6225 [eJOI 2019] 异或橙子</a><a id="7"></a></h1><p><strong>题面描述：</strong></p><p>给你一个长度为 <span class="math inline"><em>n</em></span> 的序列，你会进行 <span class="math inline"><em>q</em></span> 次操作：</p><p>操作1：将序列第 <span class="math inline"><em>i</em></span> 个数修改为 <span class="math inline"><em>x</em></span></p><p>操作2：求序列的区间 <span class="math inline"><em>l</em>、<em>r</em></span> 中所有区间的异或和的异或和，例如 <span class="math inline"><em>l</em> = 2</span>, <span class="math inline"><em>r</em> = 4</span> 的情况，记橙子序列 <span class="math inline"><em>A</em></span> 中第 <span class="math inline"><em>i</em></span> 个橙子的整数是 <span class="math inline"><em>a</em><sub><em>i</em></sub></span>，那么他要求的就是： <span class="math inline"><em>a</em><sub>2</sub> ⊕ <em>a</em><sub>3</sub> ⊕ <em>a</em><sub>4</sub> ⊕ (<em>a</em><sub>2</sub> ⊕ <em>a</em><sub>3</sub>) ⊕ (<em>a</em><sub>3</sub> ⊕ <em>a</em><sub>4</sub>) ⊕ (<em>a</em><sub>2</sub> ⊕ <em>a</em><sub>3</sub> ⊕ <em>a</em><sub>4</sub>)</span></p><p><strong>解题思路：</strong></p><p>首先我们知道异或的性质，一个数 <span class="math inline"><em>a</em></span> 自己与自己异或奇数次，结果是自己本身；自己与自己异或偶数次，结果为 <span class="math inline">0</span>.</p><p>修改操作很好维护，我们要处理的关键点应该是区间内所有区间的异或和的异或和</p><p>那么我们就应该要计算出这个区间内的某一个数和自己异或了多少次</p><p>这句话我们可以翻译为：这个区间内有多少个连续的区间包括了他本身</p><p>假设要求区间为 <span class="math inline"><em>l</em>、<em>r</em></span> ，这个数下标为 <span class="math inline"><em>i</em></span> ，那么这个数就异或了 <span class="math inline">(<em>i</em> − <em>l</em> + 1) * (<em>r</em> − <em>i</em> + 1)</span> 次</p><p>事实上，我们不需要处理这个数异或和为 <span class="math inline">0</span> 的情况，也就是，我们只需要处理 <span class="math inline">(<em>i</em> − <em>l</em> + 1) * (<em>r</em> − <em>i</em> + 1)</span> 为奇数时的情况。</p><p>两个数相乘为奇数的时候，只有奇数乘奇数一种情况，所以只有在 <span class="math inline"><em>i</em></span> 和 <span class="math inline"><em>l</em></span> 奇偶性相同且 <span class="math inline"><em>i</em></span> 和 <span class="math inline"><em>r</em></span> 奇偶性相同的时候，才需要计算</p><p>也就是说：</p><ul><li>如果 <span class="math inline"><em>l</em></span> 和 <span class="math inline"><em>r</em></span> 奇偶性不同，所有数都异或了偶数次，我们可以直接输出 <span class="math inline">0</span> ；</li><li>如果 <span class="math inline"><em>l</em></span> 和 <span class="math inline"><em>r</em></span> 奇偶性相同，我们只需要计算下标在 <span class="math inline"><em>l</em></span> 和 <span class="math inline"><em>r</em></span> 之间且下标奇偶性与他们相同的元素的异或和即可。</li></ul><p>从中我们可以看出，我们可以分奇偶性去讨论这个结果，因此分奇偶性两个树状数组去维护区间异或和会比较方便。</p><p><strong>代码：</strong></p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> int long long</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> lowbit(x) (x&amp;-x)</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> vi = std::vector&lt;<span class="type">int</span>&gt;;</span><br><span class="line"></span><br><span class="line"><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">Fenwick</span> &#123;</span><br><span class="line">    <span class="type">int</span> n;</span><br><span class="line">    std::vector&lt;T&gt; a;</span><br><span class="line"></span><br><span class="line">    <span class="built_in">Fenwick</span>(<span class="type">int</span> n_ = <span class="number">0</span>) &#123;</span><br><span class="line">        <span class="built_in">init</span>(n_);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="type">void</span> <span class="title">init</span><span class="params">(<span class="type">int</span> n_)</span> </span>&#123;</span><br><span class="line">        n = n_;</span><br><span class="line">        a.<span class="built_in">assign</span>(n, T&#123;&#125;);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="type">void</span> <span class="title">add</span><span class="params">(<span class="type">int</span> x, <span class="type">const</span> T &amp;v)</span> </span>&#123;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = x; i &lt;= n; i += i &amp; -i) &#123;</span><br><span class="line">            a[i] ^= v;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="function">T <span class="title">sum</span><span class="params">(<span class="type">int</span> x)</span> </span>&#123;</span><br><span class="line">        T ans&#123;&#125;;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = x; i &gt; <span class="number">0</span>; i -= i &amp; -i) &#123;</span><br><span class="line">            ans ^= a[i];</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> ans;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">signed</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    std::ios::<span class="built_in">sync_with_stdio</span>(<span class="literal">false</span>);</span><br><span class="line">    std::cin.<span class="built_in">tie</span>(<span class="literal">nullptr</span>);</span><br><span class="line">    std::cout.<span class="built_in">tie</span>(<span class="literal">nullptr</span>);</span><br><span class="line"></span><br><span class="line">    <span class="type">int</span> n,m;</span><br><span class="line">    std::cin &gt;&gt; n &gt;&gt; m;</span><br><span class="line">    <span class="function">Fenwick&lt;<span class="type">int</span>&gt; <span class="title">f_odd</span><span class="params">(n<span class="number">+10</span>)</span>,<span class="title">f_even</span><span class="params">(n<span class="number">+10</span>)</span></span>;</span><br><span class="line">    <span class="function">vi <span class="title">a</span><span class="params">(n<span class="number">+10</span>)</span></span>;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">1</span>; i &lt;= n; i ++) &#123;</span><br><span class="line">        <span class="type">int</span> x;</span><br><span class="line">        std::cin &gt;&gt; x;</span><br><span class="line">        <span class="keyword">if</span>(i &amp; <span class="number">1</span>) &#123;</span><br><span class="line">            f_odd.<span class="built_in">add</span>(i,x);</span><br><span class="line">        &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">            f_even.<span class="built_in">add</span>(i,x);</span><br><span class="line">        &#125;</span><br><span class="line">        a[i] = x;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">while</span>(m--) &#123;</span><br><span class="line">        <span class="type">int</span> op;</span><br><span class="line">        std::cin &gt;&gt; op;</span><br><span class="line">        <span class="keyword">if</span>(op == <span class="number">1</span>) &#123;</span><br><span class="line">            <span class="type">int</span> i,j;</span><br><span class="line">            std::cin &gt;&gt; i &gt;&gt; j;</span><br><span class="line">            <span class="keyword">if</span>(i &amp; <span class="number">1</span>) &#123;</span><br><span class="line">                f_odd.<span class="built_in">add</span>(i,j ^ a[i]);</span><br><span class="line">            &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">                f_even.<span class="built_in">add</span>(i,j ^ a[i]);</span><br><span class="line">            &#125;</span><br><span class="line">            a[i] = j;</span><br><span class="line">        &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">            <span class="type">int</span> l,r;</span><br><span class="line">            std::cin &gt;&gt; l &gt;&gt; r;</span><br><span class="line">            <span class="keyword">if</span>((r - l) &amp; <span class="number">1</span>) &#123;</span><br><span class="line">                std::cout &lt;&lt; <span class="number">0</span> &lt;&lt; <span class="string">&quot;\n&quot;</span>;</span><br><span class="line">                <span class="keyword">continue</span>;</span><br><span class="line">            &#125;</span><br><span class="line">            <span class="keyword">if</span>(l &amp; <span class="number">1</span>) &#123;</span><br><span class="line">                std::cout &lt;&lt; (f_odd.<span class="built_in">sum</span>(r) ^ f_odd.<span class="built_in">sum</span>(l<span class="number">-1</span>)) &lt;&lt; <span class="string">&#x27;\n&#x27;</span>;</span><br><span class="line">            &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">                std::cout &lt;&lt; (f_even.<span class="built_in">sum</span>(r) ^ f_even.<span class="built_in">sum</span>(l<span class="number">-1</span>)) &lt;&lt; <span class="string">&#x27;\n&#x27;</span>;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h1 id="luogu-p1908-逆序对"><a href="https://www.luogu.com.cn/problem/P1908">luogu P1908 逆序对</a><a id="8"></a></h1><p><strong>题面描述：</strong></p><p>给你一个长度为 <span class="math inline"><em>n</em></span> 的序列 <span class="math inline"><em>a</em></span> ，要求你给出 <span class="math inline"><em>i</em> &lt; <em>j</em></span> 且 <span class="math inline"><em>a</em><sub><em>i</em></sub> &gt; <em>a</em><sub><em>j</em></sub></span> 的无序数对 <span class="math inline">{<em>i</em>, <em>j</em>}</span> 的个数（序列中的数 <span class="math inline"><em>a</em><sub><em>i</em></sub></span> 不超过 <span class="math inline">10<sup>9</sup></span> ，<span class="math inline">1 ≤ <em>n</em> ≤ 5 × 10<sup>5</sup></span>）</p><p><strong>解题思路</strong></p><p>首先，<span class="math inline">10<sup>9</sup></span> 太大了，我们无法开这么大的数组，但是 <span class="math inline"><em>n</em></span> 的个数不是很大，我们存的下 <span class="math inline"><em>n</em></span> 个数，并且我们又只需要这 <span class="math inline"><em>n</em></span> 个数之间的大小关系，所以我们可以先对这 <span class="math inline"><em>n</em></span> 个数进行离散化。</p><p>然后我们就要计算逆序对了。</p><p>如何利用树状数组计算逆序对呢？</p><p>我们可以对利用树状数组对这个序列反过来计数，每次 <span class="math inline"><em>a</em><em>d</em><em>d</em></span> 一个数之后，我们统计比这个数小的数的个数，即可知道这个数作为 <span class="math inline"><em>a</em><sub><em>i</em></sub></span> 的逆序对的个数了</p><p><strong>PS：</strong> 虽然归并排序同样可以计算逆序对个数，但是我个人认为还是树状数组比较好写</p><p><strong>代码：</strong></p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;algorithm&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> lowbit(x) ((x)&amp;-(x))</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> int long long</span></span><br><span class="line"></span><br><span class="line"><span class="type">const</span> <span class="type">int</span> N = <span class="number">1e6</span> + <span class="number">10</span>;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> n,num,tree[N],rank[N];</span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">point</span>&#123;</span><br><span class="line"><span class="type">int</span> num,val;</span><br><span class="line">&#125;a[N];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">cmp</span><span class="params">(point a,point b)</span> </span>&#123;</span><br><span class="line"><span class="keyword">if</span>(a.val == b.val) <span class="keyword">return</span> a.num &lt; b.num;</span><br><span class="line"><span class="keyword">return</span> a.val &lt; b.val;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">update</span><span class="params">(<span class="type">int</span> x,<span class="type">int</span> d)</span> </span>&#123;</span><br><span class="line"><span class="keyword">while</span>(x &lt;= n) &#123;</span><br><span class="line">tree[x] += d;</span><br><span class="line">x += <span class="built_in">lowbit</span>(x);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">sum</span><span class="params">(<span class="type">int</span> x)</span> </span>&#123;</span><br><span class="line"><span class="type">int</span> re = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">while</span>(x) &#123;</span><br><span class="line">re += tree[x];</span><br><span class="line">x -= <span class="built_in">lowbit</span>(x);</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> re;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">signed</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">std::cin &gt;&gt; n;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">1</span> ; i &lt;= n ; i ++) &#123;</span><br><span class="line">std::cin &gt;&gt; a[i].val;</span><br><span class="line">a[i].num = i;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">std::<span class="built_in">sort</span>(a<span class="number">+1</span>,a+n<span class="number">+1</span>,cmp);</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">1</span> ; i &lt;= n ; i ++) rank[a[i].num] = i;</span><br><span class="line"><span class="type">int</span> ans = <span class="number">0</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">1</span> ; i &lt;= n ; i ++) &#123;</span><br><span class="line"><span class="built_in">update</span>(rank[i],<span class="number">1</span>);</span><br><span class="line">ans += i - <span class="built_in">sum</span>(rank[i]);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">std::cout &lt;&lt; ans;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h1 id="luogu-p1774-最接近神的人"><a href="https://www.luogu.com.cn/problem/P1774">luogu P1774 最接近神的人</a><a id="9"></a></h1><p><strong>题面描述：</strong></p><p>给你一个长度为 <span class="math inline"><em>n</em></span> 的序列，你可以选择任意两个位置不同数字进行交换，问你至少需要交换多少次才能使整个序列变成非下降序列。</p><p><span class="math inline">1 ≤ <em>n</em> ≤ 5 × 10<sup>5</sup></span>， <span class="math inline"><em>A</em><sub><em>i</em></sub> ∈ [ − 2<sup>31</sup>, 2<sup>31</sup>)</span></p><p><strong>解题思路：</strong></p><p>经验丰富的同学一眼就能看得出来这道题本质上要求的就是逆序对数，因为每两个逆序对数他们的大小位置都需要逆转，所以可以看成他们都需要交换一次</p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;algorithm&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> lowbit(x) ((x)&amp;-(x))</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> int long long</span></span><br><span class="line"></span><br><span class="line"><span class="type">const</span> <span class="type">int</span> N = <span class="number">1e6</span> + <span class="number">10</span>;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> n,num,tree[N],rank[N];</span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">point</span>&#123;</span><br><span class="line"><span class="type">int</span> num,val;</span><br><span class="line">&#125;a[N];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">cmp</span><span class="params">(point a,point b)</span> </span>&#123;</span><br><span class="line"><span class="keyword">if</span>(a.val == b.val) <span class="keyword">return</span> a.num &lt; b.num;</span><br><span class="line"><span class="keyword">return</span> a.val &lt; b.val;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">update</span><span class="params">(<span class="type">int</span> x,<span class="type">int</span> d)</span> </span>&#123;</span><br><span class="line"><span class="keyword">while</span>(x &lt;= n) &#123;</span><br><span class="line">tree[x] += d;</span><br><span class="line">x += <span class="built_in">lowbit</span>(x);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">sum</span><span class="params">(<span class="type">int</span> x)</span> </span>&#123;</span><br><span class="line"><span class="type">int</span> re = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">while</span>(x) &#123;</span><br><span class="line">re += tree[x];</span><br><span class="line">x -= <span class="built_in">lowbit</span>(x);</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> re;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">signed</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">std::cin &gt;&gt; n;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">1</span> ; i &lt;= n ; i ++) &#123;</span><br><span class="line">std::cin &gt;&gt; a[i].val;</span><br><span class="line">a[i].num = i;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">std::<span class="built_in">sort</span>(a<span class="number">+1</span>,a+n<span class="number">+1</span>,cmp);</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">1</span> ; i &lt;= n ; i ++) rank[a[i].num] = i;</span><br><span class="line"><span class="type">int</span> ans = <span class="number">0</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">1</span> ; i &lt;= n ; i ++) &#123;</span><br><span class="line"><span class="built_in">update</span>(rank[i],<span class="number">1</span>);</span><br><span class="line">ans += i - <span class="built_in">sum</span>(rank[i]);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">std::cout &lt;&lt; ans;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h1 id="luogu-p4378-usaco18open-out-of-sorts-s"><a href="https://www.luogu.com.cn/problem/P4378">luogu P4378 [USACO18OPEN] Out of Sorts S</a><a id="10"></a></h1><p><strong>题面描述：</strong></p><p>给你一个长度为 <span class="math inline"><em>n</em></span> 的序列，以下是一段冒泡排序的伪代码：</p><figure class="highlight python"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">sorted</span> = false</span><br><span class="line"><span class="keyword">while</span> (<span class="keyword">not</span> <span class="built_in">sorted</span>):</span><br><span class="line">   <span class="built_in">sorted</span> = true</span><br><span class="line">   moo</span><br><span class="line">   <span class="keyword">for</span> i = <span class="number">0</span> to N-<span class="number">2</span>:</span><br><span class="line">      <span class="keyword">if</span> A[i+<span class="number">1</span>] &lt; A[i]:</span><br><span class="line">         swap A[i], A[i+<span class="number">1</span>]</span><br><span class="line">         <span class="built_in">sorted</span> = false</span><br><span class="line"></span><br></pre></td></tr></table></figure><p>其中 <code>moo</code> 代表输出一行<code>moo</code></p><p>问：对于这个序列，执行完以上的冒泡排序后，一共输出了多少行<code>moo</code></p><p><strong>解题思路 by <a href="https://www.luogu.com.cn/user/122144">hs_black</a>：</strong></p><p>首先我们要看懂题面中的伪代码讲的是什么意思：其实就是每次输出一行的<code>moo</code>，然后跑一次冒泡排序，直到整个序列已经完全有序</p><p>所以，我们要输出的行数，就是他跑的冒泡排序的次数 <span class="math inline"> + 1</span> 。</p><p>那么他到底要跑多少趟冒泡排序呢？</p><p>对于一个序列, 我们称之为有序的, 当且仅当对于任意一个位置前面没有比它大的数(可以模拟一下)</p><p>对于冒泡排序有一个小性质: 每一次都会把序列未排好序的最大数“沉底”, 即推到序列尾部</p><p>比如:6 1 2 3 4 5 进行一次为 1 2 3 4 5 6</p><p>那么对于位置i, 冒泡排序进行到 <span class="math inline"><em>i</em> − 1</span> 时, <span class="math inline"><em>a</em><sub><em>i</em> − 1</sub></span> 为前 <span class="math inline"><em>i</em> − 1</span> 个数中最大的一个, 如果它大于 <span class="math inline"><em>a</em><sub><em>i</em></sub></span> 那么它就会到 <span class="math inline"><em>a</em><sub><em>i</em></sub></span> 的后面</p><p>由此可推知, 每一次位置i前都会将一个比 <span class="math inline"><em>a</em><sub><em>i</em></sub></span> 大的数推至其后, 直至没有比它大的</p><p>那么我们对每位置求一下它前面有几个比它大就好啦(注意要将答案加一)</p><p>具体来说先进行离散化, 再树状数组求解即可</p><p><strong>PS：</strong>也有不需要树状数组的做法，同学们可以自己探索一下</p><p><strong>代码：</strong></p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;iostream&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;algorithm&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> lowbit(x) ((x)&amp;-(x))</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> int long long</span></span><br><span class="line"></span><br><span class="line"><span class="type">const</span> <span class="type">int</span> N = <span class="number">1e6</span> + <span class="number">10</span>;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> n,num,tree[N],rank[N];</span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">point</span>&#123;</span><br><span class="line"><span class="type">int</span> num,val;</span><br><span class="line">&#125;a[N];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">bool</span> <span class="title">cmp</span><span class="params">(point a,point b)</span> </span>&#123;</span><br><span class="line"><span class="keyword">if</span>(a.val == b.val) <span class="keyword">return</span> a.num &lt; b.num;</span><br><span class="line"><span class="keyword">return</span> a.val &lt; b.val;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">update</span><span class="params">(<span class="type">int</span> x,<span class="type">int</span> d)</span> </span>&#123;</span><br><span class="line"><span class="keyword">while</span>(x &lt;= n) &#123;</span><br><span class="line">tree[x] += d;</span><br><span class="line">x += <span class="built_in">lowbit</span>(x);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">sum</span><span class="params">(<span class="type">int</span> x)</span> </span>&#123;</span><br><span class="line"><span class="type">int</span> re = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">while</span>(x) &#123;</span><br><span class="line">re += tree[x];</span><br><span class="line">x -= <span class="built_in">lowbit</span>(x);</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> re;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">signed</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">std::cin &gt;&gt; n;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">1</span> ; i &lt;= n ; i ++) &#123;</span><br><span class="line">std::cin &gt;&gt; a[i].val;</span><br><span class="line">a[i].num = i;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">std::<span class="built_in">sort</span>(a<span class="number">+1</span>,a+n<span class="number">+1</span>,cmp);</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">1</span> ; i &lt;= n ; i ++) rank[a[i].num] = i;</span><br><span class="line"><span class="type">int</span> ans = <span class="number">0</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">1</span> ; i &lt;= n ; i ++) &#123;</span><br><span class="line"><span class="built_in">update</span>(rank[i],<span class="number">1</span>);</span><br><span class="line">ans = std::<span class="built_in">max</span>(ans, i - <span class="built_in">sum</span>(rank[i]) + <span class="number">1</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">std::cout &lt;&lt; ans;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h1 id="luogu-p2357-守墓人"><a href="https://www.luogu.com.cn/problem/P2357">luogu P2357 守墓人</a><a id="11"></a></h1><p><strong>题面描述：</strong></p><p>守墓人有 <span class="math inline"><em>n</em></span> 个墓碑，你会得到所有墓碑的初始风水值，他会进行 <span class="math inline"><em>f</em></span> 次下列操作中的一种操作：</p><ul><li>操作 <span class="math inline">1</span> ：将 <span class="math inline">[<em>l</em>, <em>r</em>]</span> 区间的墓碑全部增加 <span class="math inline"><em>k</em></span></li><li>操作 <span class="math inline">2</span> ：将 <span class="math inline">1</span> 号墓碑风水值增加 <span class="math inline"><em>k</em></span></li><li>操作 <span class="math inline">3</span> ：将 <span class="math inline">1</span> 号墓碑风水值降低 <span class="math inline"><em>k</em></span></li><li>操作 <span class="math inline">4</span> ：统计区间 <span class="math inline">[<em>l</em>, <em>r</em>]</span> 之间所有墓碑的风水值之和</li><li>操作 <span class="math inline">5</span> ：求 <span class="math inline">1</span> 号墓碑的风水值</li></ul><p><span class="math inline">1 ≤ <em>n</em>, <em>f</em> ≤ 2 × 10<sup>5</sup></span>，答案不超过 64 位整数。</p><p><strong>解题思路</strong></p><p>从题目的数据范围，我们可以发现，我们每次操作的时间复杂度大约只能在 <span class="math inline"><em>O</em>(<em>l</em><em>o</em><em>g</em><em>n</em>)</span> 之内，</p><p>从要求来看：区间增加操作，我们需要对对原数组进行差分操作；区间求和操作，我们需要对原数组进行前缀和操作</p><p>因此，很明显这并不是一个树状数组就可以解决的问题。</p><p>三个数组：差分数组，原数组，前缀和数组；我们可以通过差分数组与原数组之间的关系 以及 原数组与前缀和数组之间的关系 ，计算一下差分数组与前缀和数组之间的关系</p><p>具体推理如下（by <a href="https://www.cnblogs.com/RabbitHu/p/BIT.html">胡小兔</a>）：</p><p>位置<span class="math inline"><em>p</em></span>的前缀和 =</p><p><span class="math display">$$\sum_{i=1}^{p} a[i] = \sum_{i=1}^{p}\sum_{j=1}^{i} d[j]$$</span></p><p>在等式最右侧的式子<span class="math inline">$\sum_{i=1}^{p}\sum_{j=1}^{i} d[j]$</span>中，<span class="math inline"><em>d</em>[1]</span> 被用了<span class="math inline"><em>p</em></span>次，<span class="math inline"><em>d</em>[2]</span>被用了<span class="math inline"><em>p</em> − 1</span>次……那么我们可以写出： 位置<span class="math inline"><em>p</em></span>的前缀和 =</p><p><span class="math display">$$\sum_{i=1}^{p}\sum_{j=1}^{i} d[j] = \sum_{i=1}^{p} d[i]*(p-i+1) = (p+1)*\sum_{i=1}^{p} d[i] - \sum_{i=1}^{p} d[i]*i$$</span></p><p>那么我们可以维护两个数组的前缀和： 一个数组是 <span class="math inline"><em>s</em><em>u</em><em>m</em>1[<em>i</em>] = <em>d</em>[<em>i</em>]</span>， 另一个数组是 <span class="math inline"><em>s</em><em>u</em><em>m</em>2[<em>i</em>] = <em>d</em>[<em>i</em>] * <em>i</em></span>。</p><p><strong>代码：</strong></p><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> int long long</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> lowbit(x) (x&amp;-x)</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;</span><br><span class="line"><span class="keyword">struct</span> <span class="title class_">Fenwick</span> &#123;</span><br><span class="line">    <span class="type">int</span> n;</span><br><span class="line">    std::vector&lt;T&gt; a;</span><br><span class="line"></span><br><span class="line">    <span class="built_in">Fenwick</span>(<span class="type">int</span> n_ = <span class="number">0</span>) &#123;</span><br><span class="line">        <span class="built_in">init</span>(n_);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="type">void</span> <span class="title">init</span><span class="params">(<span class="type">int</span> n_)</span> </span>&#123;</span><br><span class="line">        n = n_;</span><br><span class="line">        a.<span class="built_in">assign</span>(n, T&#123;&#125;);</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="function"><span class="type">void</span> <span class="title">add</span><span class="params">(<span class="type">int</span> x, <span class="type">const</span> T &amp;v)</span> </span>&#123;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = x; i &lt;= n; i += i &amp; -i) &#123;</span><br><span class="line">            a[i] = a[i] + v;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    <span class="function">T <span class="title">sum</span><span class="params">(<span class="type">int</span> x)</span> </span>&#123;</span><br><span class="line">        T ans&#123;&#125;;</span><br><span class="line">        <span class="keyword">for</span> (<span class="type">int</span> i = x; i &gt; <span class="number">0</span>; i -= i &amp; -i) &#123;</span><br><span class="line">            ans = ans + a[i];</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">return</span> ans;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">signed</span> <span class="title">main</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    std::ios::<span class="built_in">sync_with_stdio</span>(<span class="literal">false</span>);</span><br><span class="line">    std::cin.<span class="built_in">tie</span>(<span class="literal">nullptr</span>);</span><br><span class="line">    std::cout.<span class="built_in">tie</span>(<span class="literal">nullptr</span>);</span><br><span class="line"></span><br><span class="line">    <span class="type">int</span> n,m;</span><br><span class="line">    std::cin &gt;&gt; n &gt;&gt; m;</span><br><span class="line"></span><br><span class="line">    <span class="type">int</span> mem = <span class="number">0</span>;</span><br><span class="line"></span><br><span class="line">    <span class="function">Fenwick&lt;<span class="type">int</span>&gt; <span class="title">f1</span><span class="params">(n<span class="number">+2</span>)</span>,<span class="title">f2</span><span class="params">(n<span class="number">+2</span>)</span></span>;</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">1</span> ; i &lt;= n ; i ++) &#123;</span><br><span class="line">        <span class="type">int</span> x;</span><br><span class="line">        std::cin &gt;&gt; x;</span><br><span class="line">        f<span class="number">1.</span><span class="built_in">add</span>(i, x - mem);</span><br><span class="line">        f<span class="number">2.</span><span class="built_in">add</span>(i, (x - mem) * i);</span><br><span class="line">        mem = x;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">while</span>(m--) &#123;</span><br><span class="line">        <span class="type">int</span> op;</span><br><span class="line">        std::cin &gt;&gt; op;</span><br><span class="line">        <span class="keyword">if</span>(op == <span class="number">1</span>) &#123;</span><br><span class="line">            <span class="type">int</span> l,r,v;</span><br><span class="line">            std::cin &gt;&gt; l &gt;&gt; r &gt;&gt; v;</span><br><span class="line">            f<span class="number">1.</span><span class="built_in">add</span>(l, v);</span><br><span class="line">            f<span class="number">2.</span><span class="built_in">add</span>(l, v * l);</span><br><span class="line">            f<span class="number">1.</span><span class="built_in">add</span>(r<span class="number">+1</span>, - v);</span><br><span class="line">            f<span class="number">2.</span><span class="built_in">add</span>(r<span class="number">+1</span>, - v * (r + <span class="number">1</span>));</span><br><span class="line">        &#125; <span class="keyword">else</span> <span class="keyword">if</span>(op == <span class="number">2</span>) &#123;</span><br><span class="line">            <span class="type">int</span> v;</span><br><span class="line">            std::cin &gt;&gt; v;</span><br><span class="line">            f<span class="number">1.</span><span class="built_in">add</span>(<span class="number">1</span>, v);</span><br><span class="line">            f<span class="number">1.</span><span class="built_in">add</span>(<span class="number">2</span>, -v);</span><br><span class="line">            f<span class="number">2.</span><span class="built_in">add</span>(<span class="number">1</span>, v);</span><br><span class="line">            f<span class="number">2.</span><span class="built_in">add</span>(<span class="number">2</span>, -v * <span class="number">2</span>);</span><br><span class="line">        &#125; <span class="keyword">else</span> <span class="keyword">if</span>(op == <span class="number">3</span>) &#123;</span><br><span class="line">            <span class="type">int</span> v;</span><br><span class="line">            std::cin &gt;&gt; v;</span><br><span class="line">            f<span class="number">1.</span><span class="built_in">add</span>(<span class="number">1</span>, -v);</span><br><span class="line">            f<span class="number">1.</span><span class="built_in">add</span>(<span class="number">2</span>, v);</span><br><span class="line">            f<span class="number">2.</span><span class="built_in">add</span>(<span class="number">1</span>, -v);</span><br><span class="line">            f<span class="number">2.</span><span class="built_in">add</span>(<span class="number">2</span>, v * <span class="number">2</span>);</span><br><span class="line">        &#125; <span class="keyword">else</span> <span class="keyword">if</span>(op == <span class="number">4</span>) &#123;</span><br><span class="line">            <span class="type">int</span> l,r;</span><br><span class="line">            std::cin &gt;&gt; l &gt;&gt; r;</span><br><span class="line">            std::cout &lt;&lt; (r + <span class="number">1</span>) * f<span class="number">1.</span><span class="built_in">sum</span>(r) - f<span class="number">2.</span><span class="built_in">sum</span>(r) - ((l) * f<span class="number">1.</span><span class="built_in">sum</span>(l<span class="number">-1</span>) - f<span class="number">2.</span><span class="built_in">sum</span>(l<span class="number">-1</span>)) &lt;&lt; <span class="string">&#x27;\n&#x27;</span>;</span><br><span class="line">        &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">            std::cout &lt;&lt; f<span class="number">1.</span><span class="built_in">sum</span>(<span class="number">1</span>) &lt;&lt; <span class="string">&#x27;\n&#x27;</span>;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;fenwick-树状数组&quot;&gt;Fenwick 树状数组&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;原理&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; &lt;strong&gt;简单题&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;#1&quot;&gt;&lt;strong&gt;洛谷 P3374 【模板】树状数组 1&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;#2&quot;&gt;&lt;strong&gt;洛谷 P3368 【模板】树状数组 2&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;#3&quot;&gt;&lt;strong&gt;洛谷 P5057 [CQOI2006] 简单题&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;#4&quot;&gt;&lt;strong&gt;洛谷 P2068 统计和&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;#5&quot;&gt;&lt;strong&gt;洛谷 P4939 Agent2&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;</summary>
    
    
    
    
    <category term="Fenwick" scheme="https://jiejiejiang2004.github.io/tags/Fenwick/"/>
    
  </entry>
  
  <entry>
    <title>SCAU 高级程序设计语言 教材习题</title>
    <link href="https://jiejiejiang2004.github.io/2024/11/11/SCAU%20%E9%AB%98%E7%BA%A7%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E8%AF%AD%E8%A8%80%20%E6%95%99%E6%9D%90%E4%B9%A0%E9%A2%98/"/>
    <id>https://jiejiejiang2004.github.io/2024/11/11/SCAU%20%E9%AB%98%E7%BA%A7%E7%A8%8B%E5%BA%8F%E8%AE%BE%E8%AE%A1%E8%AF%AD%E8%A8%80%20%E6%95%99%E6%9D%90%E4%B9%A0%E9%A2%98/</id>
    <published>2024-11-10T16:00:00.000Z</published>
    <updated>2025-10-30T02:11:28.923Z</updated>
    
    <content type="html"><![CDATA[<h1 id="scau-高级程序设计语言-教材习题">SCAU 高级程序设计语言 教材习题</h1><h2 id="第三章">第三章</h2><h3 id="分期还款加强版">18041 分期还款(加强版)</h3><p><strong>Description</strong></p><p>从银行贷款金额为 <span class="math inline"><em>d</em></span>，准备每月还款额为 <span class="math inline"><em>p</em></span>，月利率为 <span class="math inline"><em>r</em></span> 。请编写程序输入这三个数值，计算并输出多少个月能够还清贷款，输出时保留 <span class="math inline">1</span> 位小数。 如果无法还清，请输出 “God” 计算公式如下：</p><p><span class="math display">$$m = \frac{\log{\frac{p}{p - d \times r}}}{\log{(1+r)}}$$</span></p><p><strong>输入格式</strong></p><p>三个数，分别为货款金额、每月还款和月利率，以空格分隔，均为非负数，其中 <span class="math inline"><em>d</em>，<em>p</em>，<em>r</em> &gt;  = 0</span></p><span id="more"></span><p><strong>输出格式</strong></p><p>需要还款的月份</p><p><strong>输入样例</strong> <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">50 50 0.01</span><br></pre></td></tr></table></figure> <strong>输出样例</strong> <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">1.0</span><br></pre></td></tr></table></figure></p><p><strong>题解</strong></p><p>主要是使用 <code>if-else</code>筛去<strong>无法计算</strong>或者<strong>不符合实际</strong>的情况，其余的情况正常计算即可</p><ol type="1"><li><span class="math inline">1 + <em>r</em> &gt; 0</span> 时，无法计算，输出 <code>God</code></li><li><span class="math inline"><em>p</em> − <em>d</em> × <em>r</em> = 0</span> 时，该分数无意义，无法计算，输出 <code>God</code></li><li><span class="math inline"><em>p</em></span> 与 <span class="math inline"><em>p</em> − <em>d</em> × <em>r</em></span> 符号不一致时，<span class="math inline">$\frac{p}{p - d \times r} \le 0$</span> 无法计算，输出 <code>God</code> （由于题目给出 p 是非负的 ，只需要判断 <span class="math inline"><em>p</em></span> 是否等于 <span class="math inline">0</span> 和 <span class="math inline"><em>p</em> − <em>d</em> × <em>r</em></span> 是否小于 <span class="math inline">0</span> 即可）</li><li>当 <span class="math inline"><em>d</em> = 0</span> 时，无需还款，直接输出 <code>0.0</code></li><li>其他情况，直接计算即可</li></ol><p><strong>代码</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;math.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span> &#123;</span><br><span class="line"></span><br><span class="line">    <span class="type">double</span> d,p,r;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%lf%lf%lf&quot;</span>,&amp;d,&amp;p,&amp;r);</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">if</span>(d == <span class="number">0</span>) &#123;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;0.0\n&quot;</span>);</span><br><span class="line">&#125;</span><br><span class="line">    <span class="keyword">else</span> <span class="keyword">if</span>(p - d*r &lt;= <span class="number">0</span> || p == <span class="number">0</span>) &#123;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;God\n&quot;</span>);</span><br><span class="line">&#125;</span><br><span class="line">    <span class="keyword">else</span>&#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%.1f&quot;</span>, <span class="built_in">log10</span>(p/(p-d*r))/<span class="built_in">log10</span>(<span class="number">1</span>+r));</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="第四章">第四章</h2><h3 id="计算分段函数值">18042 计算分段函数值</h3><p><strong>Description</strong> 根据如下数学公式，编写程序输入 <span class="math inline"><em>x</em></span> ，计算并输出 <span class="math inline"><em>y</em></span> 的值，保留两位小数 <span class="math display">$$y = \begin{cases}x &amp;,  x \lt 1 \\2x - 1 &amp;, 1 \le x \lt 10 \\3x - 11 &amp;, x \ge 10\end{cases}$$</span> <strong>输入格式</strong> 输入一个实数 <span class="math inline"><em>x</em></span> <strong>输出格式</strong> 输出函数值</p><p><strong>输入样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">0</span><br></pre></td></tr></table></figure><p><strong>输出样例</strong> <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">0.00</span><br></pre></td></tr></table></figure></p><p><strong>题解</strong></p><p>开个 <code>if - else if - else</code> 选择分支结构就好了，分类讨论一下</p><p><strong>代码</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span> &#123;</span><br><span class="line">    <span class="type">double</span> x;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%lf&quot;</span>,&amp;x);</span><br><span class="line">    <span class="type">double</span> ans;</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">if</span>(x&lt;<span class="number">1</span>) &#123;</span><br><span class="line">    ans = x;</span><br><span class="line">&#125;</span><br><span class="line">    <span class="keyword">else</span> <span class="keyword">if</span>(x &gt;= <span class="number">1</span> &amp;&amp; x &lt; <span class="number">10</span>) &#123;</span><br><span class="line">    ans = <span class="number">2</span> * x - <span class="number">1</span>;</span><br><span class="line">&#125;</span><br><span class="line">    <span class="keyword">else</span> &#123;</span><br><span class="line">    ans = <span class="number">3</span> * x - <span class="number">11</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;%.2f&quot;</span>,ans);</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="找出3个数中最大的数">18043 找出3个数中最大的数</h3><p><strong>Description</strong></p><p>编写程序，由键盘输入 <span class="math inline">3</span> 个整数，输出其中最大的数。</p><p><strong>输入格式</strong></p><p>三个整数，空格分隔</p><p><strong>输出格式</strong></p><p>最大的数</p><p><strong>输入样例</strong> <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">3 6 4</span><br></pre></td></tr></table></figure></p><p><strong>输出样例</strong> <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">6</span><br></pre></td></tr></table></figure></p><p><strong>题解</strong></p><p>用一个变量存储最大的那个数（即答案）</p><p>用两个 <code>if-else</code> ，找出最大的数</p><p><strong>代码</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a,b,c;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d %d %d&quot;</span>,&amp;a,&amp;b,&amp;c);</span><br><span class="line">    </span><br><span class="line">    <span class="type">int</span> max = a;</span><br><span class="line">    <span class="keyword">if</span>(b &gt; max) &#123;</span><br><span class="line">    max = b;</span><br><span class="line">&#125;</span><br><span class="line">    <span class="keyword">if</span>(c &gt; max) &#123;</span><br><span class="line">    max = c;</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d&quot;</span>,max);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="成绩等级评分">18044 成绩等级评分</h3><p><strong>Description</strong></p><p>编写程序，由键盘输入一个百分制的整数成绩，要求输出对应的成绩等级。 <span class="math inline">90</span> 分以上为 <span class="math inline"><em>A</em></span> ， <span class="math inline">80</span> 到 <span class="math inline">89</span> 分为 <span class="math inline"><em>B</em></span> ， <span class="math inline">70</span> 到 <span class="math inline">79</span> 分为 <span class="math inline"><em>C</em></span> ， <span class="math inline">60</span> 到 <span class="math inline">69</span> 分为 <span class="math inline"><em>D</em></span> ，<span class="math inline">60</span> 分以下为 <span class="math inline"><em>E</em></span> 。成绩不在 <span class="math inline">0</span> 到 <span class="math inline">100</span> 之间时输出 “error”</p><p><strong>输入格式</strong></p><p>一个整数成绩</p><p><strong>输出格式</strong></p><p>输出对应的等级或 error</p><p><strong>输入样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">99</span><br></pre></td></tr></table></figure><p><strong>输出样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">A</span><br></pre></td></tr></table></figure><p><strong>题解</strong></p><p>直接来几个 <code>if - else if - else</code> 选择分支结构就好了</p><p>搞什么<code>switch</code> 可以，但是没必要（个人看法）（我记得老师上课会讲这种写法的）</p><p><strong>代码</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span> &#123;</span><br><span class="line">    <span class="type">int</span> score;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;score);</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">if</span>(score&gt;<span class="number">100</span> || score&lt;<span class="number">0</span>) &#123;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;error&quot;</span>);</span><br><span class="line">&#125;</span><br><span class="line">    <span class="keyword">else</span> <span class="keyword">if</span>(score&gt;=<span class="number">90</span>) &#123;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;A&quot;</span>);</span><br><span class="line">&#125;</span><br><span class="line">    <span class="keyword">else</span> <span class="keyword">if</span>(score&gt;=<span class="number">80</span>) &#123;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;B&quot;</span>);</span><br><span class="line">&#125;</span><br><span class="line">    <span class="keyword">else</span> <span class="keyword">if</span>(score&gt;=<span class="number">70</span>) &#123;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;C&quot;</span>);</span><br><span class="line">&#125;</span><br><span class="line">    <span class="keyword">else</span> <span class="keyword">if</span>(score&gt;=<span class="number">60</span>) &#123;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;D&quot;</span>);</span><br><span class="line">&#125;</span><br><span class="line">    <span class="keyword">else</span> &#123;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;E&quot;</span>);</span><br><span class="line">&#125;</span><br><span class="line">        </span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="前一个和后一个字符">18045 前一个和后一个字符</h3><p><strong>Description</strong></p><p>编写程序，输入一个数字字符，输出其前一个和后一个的数字字符，如果输入的是0前一个输出“first”，9后一个则输出“last”，输入的不是数学字符，输出“error”</p><p><strong>输入格式</strong></p><p>一个字符</p><p><strong>输出格式</strong></p><p>输出结果</p><p><strong>输入样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">0</span><br></pre></td></tr></table></figure><p><strong>输出样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">first 1</span><br></pre></td></tr></table></figure><p><strong>题解</strong></p><p>依然是直接来几个 <code>if - else</code> 就好了</p><p>先判断是不是数字</p><p>再判断是不是 <span class="math inline">0</span> 或者 <span class="math inline">9</span></p><p><strong>代码</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span> &#123;</span><br><span class="line"></span><br><span class="line">    <span class="type">int</span> ch = getchar();</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">if</span>(<span class="string">&#x27;0&#x27;</span>&lt;=ch &amp;&amp; ch&lt;=<span class="string">&#x27;9&#x27;</span>) &#123;</span><br><span class="line">    </span><br><span class="line">    <span class="type">int</span> num = ch - <span class="string">&#x27;0&#x27;</span>;</span><br><span class="line">    </span><br><span class="line">        <span class="keyword">if</span>(num == <span class="number">0</span>) &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;first&quot;</span>);</span><br><span class="line">&#125; <span class="keyword">else</span> &#123;</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;%d&quot;</span>,num - <span class="number">1</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot; &quot;</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span>(num == <span class="number">9</span>) &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;last&quot;</span>);</span><br><span class="line">&#125; <span class="keyword">else</span> &#123;</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;%d&quot;</span>,num + <span class="number">1</span>);</span><br><span class="line">&#125;</span><br><span class="line">    &#125;</span><br><span class="line"><span class="keyword">else</span> &#123;</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;error&quot;</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="秒后的时间">18037 20秒后的时间</h3><p><strong>Description</strong></p><p>编写程序，输入三个整数变量 <span class="math inline"><em>h</em><em>o</em><em>u</em><em>r</em></span>（小时）、<span class="math inline"><em>m</em><em>i</em><em>n</em><em>u</em><em>t</em><em>e</em></span>（分钟）、<span class="math inline"><em>s</em><em>e</em><em>c</em><em>o</em><em>n</em><em>d</em></span>（秒）代表一个时间，输出该时间 <span class="math inline">20</span> 秒以后的时间。</p><p><strong>输入格式</strong></p><p>一行三个整数，分别代表小时、分钟、秒，中间使用冒号分隔</p><p><strong>输出格式</strong></p><p>输出一个时间，数字间用冒号分隔</p><p>小时、分钟、秒均占两个数字位，不足位用0补足</p><p><strong>输入样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">15:30:41</span><br></pre></td></tr></table></figure><p><strong>输出样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">15:31:01</span><br></pre></td></tr></table></figure><p><strong>题解</strong></p><p>先给秒数加上 <span class="math inline">20</span> ，后面再加几个 <code>if - else</code> 判断是否要进位就可以了</p><p><strong>代码</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> h,m,s;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d:%d:%d&quot;</span>, &amp;h,&amp;m,&amp;s);</span><br><span class="line">    </span><br><span class="line">    s += <span class="number">20</span>;</span><br><span class="line">    <span class="keyword">if</span>(s &gt;= <span class="number">60</span>) &#123;</span><br><span class="line">        s %= <span class="number">60</span>;</span><br><span class="line">        m++;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span>(m &gt;= <span class="number">60</span>) &#123;</span><br><span class="line">        m %= <span class="number">60</span>;</span><br><span class="line">        h++;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">if</span>(h &gt;= <span class="number">24</span>) &#123;</span><br><span class="line">    h %= <span class="number">24</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%02d:%02d:%02d\n&quot;</span>, h, m, s);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="第五章">第五章</h2><h3 id="字母分类统计">18046 字母分类统计</h3><p><strong>Description</strong></p><p>输入一行以换行符结束的字符，统计并输出其中英文字母、数字、空格和其它字符的个数。</p><p><strong>输入格式</strong></p><p>一行字符，以换行符结束</p><p><strong>输出格式</strong></p><p>一行4个数字分别为：英文字母、数字、空格和其它字符的个数，两数据之间以一个空格分隔</p><p><strong>输入样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">ABC 456!</span><br></pre></td></tr></table></figure><p><strong>输出样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">3 3 1 1</span><br></pre></td></tr></table></figure><p><strong>题解</strong></p><p>判断字符属于那种类型</p><p>使用 <code>if - else</code> 分类进行计数即可</p><p><strong>代码</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span> &#123;</span><br><span class="line">    <span class="type">char</span> ch;</span><br><span class="line">    <span class="type">int</span> nL=<span class="number">0</span>, nN=<span class="number">0</span>, nS=<span class="number">0</span>, nO=<span class="number">0</span>;</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">while</span>((ch = getchar()) != <span class="string">&#x27;\n&#x27;</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">if</span>(ch &gt;= <span class="string">&#x27;a&#x27;</span> &amp;&amp; ch &lt;= <span class="string">&#x27;z&#x27;</span>|| ch &gt;= <span class="string">&#x27;A&#x27;</span> &amp;&amp; ch &lt;= <span class="string">&#x27;Z&#x27;</span>) &#123;</span><br><span class="line">        nL++;</span><br><span class="line">&#125;</span><br><span class="line">        <span class="keyword">else</span> <span class="keyword">if</span> (ch &gt;= <span class="string">&#x27;0&#x27;</span> &amp;&amp; ch &lt;= <span class="string">&#x27;9&#x27;</span>) &#123;</span><br><span class="line">        nN++;</span><br><span class="line">&#125;</span><br><span class="line">        <span class="keyword">else</span> <span class="keyword">if</span> (ch == <span class="string">&#x27; &#x27;</span>) &#123;</span><br><span class="line">        nS++;</span><br><span class="line">&#125;</span><br><span class="line">        <span class="keyword">else</span> &#123;</span><br><span class="line">        nO++;</span><br><span class="line">&#125;</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d %d %d %d\n&quot;</span>, nL, nN, nS, nO);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="水仙花数">18047 水仙花数</h3><p><strong>Description</strong></p><p>输出所有的水仙花数。所谓水仙花数是一个 <span class="math inline">3</span> 位的正整数，其各位数字的立方和等于这个数本身。</p><p>例如，<span class="math inline">153</span> 是水仙花数，因为 <span class="math inline">1<sup>3</sup> + 5<sup>3</sup> + 3<sup>3</sup> = 153</span>。</p><p><strong>输入格式</strong></p><p>无</p><p><strong>输出格式</strong></p><p>一行一个，由小到大输出所有水仙花数</p><p><strong>输入样例</strong></p><p>无</p><p><strong>输出样例</strong></p><p>略</p><p><strong>题解</strong></p><p>从 <span class="math inline">100</span> 遍历到 <span class="math inline">999</span></p><p>对每个数拆开位进行计算，判断是否相等</p><p><strong>代码</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span> &#123;</span><br><span class="line"></span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">100</span> ; i &lt;= <span class="number">999</span> ; i ++) &#123;</span><br><span class="line">    </span><br><span class="line">    <span class="type">int</span> f1 = i/<span class="number">100</span>;</span><br><span class="line">    <span class="type">int</span> f2 = (i - f1 * <span class="number">100</span>) / <span class="number">10</span>;</span><br><span class="line">    <span class="type">int</span> f3 = i % <span class="number">10</span>;</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">if</span>(f1*f1*f1 + f2*f2*f2 + f3*f3*f3 == i) &#123;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>,i);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="计算数列和">1037 计算数列和</h3><p><strong>Description</strong></p><p>有数列：</p><p><span class="math display">$$\frac{2}{1} \quad \frac{3}{2} \quad \frac{5}{3} \quad \frac{8}{5} \quad \frac{13}{8} \quad \frac{21}{13}$$</span></p><p>编程实现，由键盘输入 <span class="math inline"><em>n</em></span>，计算输出数列前 <span class="math inline"><em>n</em></span> 项和。（结果保留四位小数，提示：要使用 <span class="math inline"><em>d</em><em>o</em><em>u</em><em>b</em><em>l</em><em>e</em></span> ，否则精度不够）</p><p><strong>输出格式</strong></p><p>请按格式输出</p><p><strong>输入样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">20</span><br></pre></td></tr></table></figure><p><strong>输出样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">32.6603</span><br></pre></td></tr></table></figure><p><strong>题解</strong></p><p>经过观察我们可以发现</p><p>下一个分数的<strong>分母</strong> 等于上一个数的<strong>分子</strong></p><p>下一个数的的<strong>分子</strong> 等于上一个数的<strong>分子和分母的和</strong></p><p>就这样往下递推计算前 <span class="math inline"><em>n</em></span> 项和即可</p><p><strong>代码</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span><span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span> &#123;   </span><br><span class="line">    <span class="type">double</span> up = <span class="number">2</span>;</span><br><span class="line"><span class="type">double</span> down = <span class="number">1</span>;</span><br><span class="line"><span class="type">double</span> ans = <span class="number">0</span>;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> n;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;n);</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">1</span> ; i &lt;= n ; i ++) &#123;</span><br><span class="line">s += up/down;</span><br><span class="line">a = a + b;</span><br><span class="line">b = a - b;</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%.4f\n&quot;</span>,ans);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="自由落体">18048 自由落体</h3><p><strong>Description</strong></p><p>一个球从 <span class="math inline">100</span> 米的高度自由落下，每次落地后弹起的原来高度的一半。计算并输出第 <span class="math inline"><em>n</em></span> 次落地时，共经过了多少米，第 <span class="math inline"><em>n</em></span> 次弹起的高度是多少？结果显示 <span class="math inline">3</span> 位小数。</p><p><strong>输入格式</strong></p><p>从键盘输入一个数 <span class="math inline"><em>n</em>(<em>n</em> &gt; 0)</span></p><p><strong>输出格式</strong></p><p>输出两个数，分别为共经过的米数和第 <span class="math inline"><em>n</em></span> 次弹起的高度，以一个空格分隔</p><p><strong>输入样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">1</span><br></pre></td></tr></table></figure><p><strong>输出样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">100.000 50.000</span><br></pre></td></tr></table></figure><p><strong>题解</strong></p><p>这题看似计数很麻烦，实际上只要分开算就好了</p><p>观察可得，第 <span class="math inline"><em>n</em></span> 次落地，他经过了 <span class="math inline"><em>n</em></span> 次落地和 <span class="math inline"><em>n</em> − 1</span> 次弹起，</p><p>我们只需要计算这些期间内经过的路程即可</p><p><strong>代码</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span> &#123;</span><br><span class="line">    <span class="type">double</span> sum = <span class="number">0</span>;</span><br><span class="line">    <span class="type">double</span> down = <span class="number">100</span>;</span><br><span class="line">    <span class="type">double</span> up = <span class="number">50</span>;</span><br><span class="line">    </span><br><span class="line">    <span class="type">int</span> n;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;n);</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">1</span> ; i &lt;= n ; i++) &#123;</span><br><span class="line">        sum += down;</span><br><span class="line">        down /= <span class="number">2</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">1</span> ; i &lt; n ; i++) &#123;</span><br><span class="line">        sum += up;</span><br><span class="line">        up /= <span class="number">2</span>;</span><br><span class="line">    &#125;</span><br><span class="line">    </span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%.3f %.3f&quot;</span>, sum, up);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="迭代法求平方根">18049 迭代法求平方根</h3><p><strong>Description</strong></p><p>使用迭代法求 <span class="math inline"><em>a</em></span> 的平方根。求平方根的迭代公式如下，要求计算到相邻两次求出的 <span class="math inline"><em>x</em></span> 的差的绝对值小于 <span class="math inline">10<sup> − 5</sup></span> 时停止，结果显示 <span class="math inline">4</span> 位小数</p><p><span class="math display">$$x_{n+1} = \frac{1}{2}(x_n + \frac{a}{x_n})$$</span></p><p><strong>输入格式</strong></p><p>输入一个非负实数 <span class="math inline"><em>a</em></span></p><p><strong>输出格式</strong></p><p>计算并输出平方根</p><p><strong>输入样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">16</span><br></pre></td></tr></table></figure><p><strong>输出样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">4.0000</span><br></pre></td></tr></table></figure><p><strong>题解</strong></p><p>使用<code>while</code> 循环，不断逼近即可求得答案</p><p>注意 <span class="math inline">0 ÷ 0</span> 无意义，需要特判</p><p><strong>代码</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;math.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">double</span> num;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%lf&quot;</span>, &amp;num);</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">if</span>(num == <span class="number">0</span>) &#123;</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%.4f&quot;</span>,<span class="number">0</span>);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line">    </span><br><span class="line">    <span class="type">double</span> x0 = num;</span><br><span class="line">    <span class="type">double</span> x1 = (x0 + num/x0) / <span class="number">2</span>;</span><br><span class="line">    </span><br><span class="line">    <span class="keyword">while</span>(<span class="built_in">fabs</span>(x0 - x1) &gt;= <span class="number">1e-5</span>) &#123;</span><br><span class="line">    x0 = (x1 + num/x1) / <span class="number">2</span>;</span><br><span class="line">    </span><br><span class="line">    <span class="type">double</span> temp = x0;</span><br><span class="line">    x0 = x1;</span><br><span class="line">    x1 = temp;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%.4f\n&quot;</span>, x1);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="打印三角形">18050 打印三角形</h3><p><strong>Description</strong></p><p>编写程序，输入整数 <span class="math inline"><em>n</em></span>，输出 <span class="math inline"><em>n</em></span> 行的字符图案。例如 <span class="math inline"><em>n</em> = 5</span> 时输出：</p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">    *</span><br><span class="line">   **</span><br><span class="line">  ***</span><br><span class="line"> ****</span><br><span class="line">*****</span><br><span class="line"> ****</span><br><span class="line">  ***</span><br><span class="line">   **</span><br><span class="line">    *</span><br></pre></td></tr></table></figure><p><strong>输入格式</strong></p><p>输入一个整数</p><p><strong>输出格式</strong></p><p>输出 <span class="math inline">2 × <em>n</em> − 1</span> 行的三角形</p><p><strong>输入样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">2</span><br></pre></td></tr></table></figure><p><strong>输出样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"> *</span><br><span class="line">**</span><br><span class="line"> *</span><br></pre></td></tr></table></figure><p><strong>题解</strong></p><p>只需要每个循环计算出打印多少个空格，打印多少个星号即可</p><p>后面直接按这个数量和顺序输出就可以了</p><p><strong>代码</strong>（分两个循环输出版本）</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span> &#123;</span><br><span class="line"><span class="type">int</span> n;</span><br><span class="line"><span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;n);</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">1</span> ; i &lt; n ; i ++) &#123;</span><br><span class="line">        </span><br><span class="line"><span class="type">int</span> space = n - i;</span><br><span class="line"><span class="type">int</span> xing = i;</span><br><span class="line">        </span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> j = <span class="number">0</span> ; j &lt; space ; j ++) &#123;</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot; &quot;</span>);</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> j = <span class="number">0</span> ; j &lt; xing ; j ++) &#123;</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;*&quot;</span>);</span><br><span class="line">&#125;</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">1</span> ; i &lt;= n ; i ++) &#123;</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;*&quot;</span>);</span><br><span class="line">&#125;</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = n<span class="number">-1</span> ; i &gt; <span class="number">0</span> ; i --) &#123;</span><br><span class="line">        </span><br><span class="line"><span class="type">int</span> space = n - i;</span><br><span class="line"><span class="type">int</span> xing = i;</span><br><span class="line">        </span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> j = <span class="number">0</span> ; j &lt; space ; j ++) &#123;</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot; &quot;</span>);</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> j = <span class="number">0</span> ; j &lt; xing ; j ++) &#123;</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;*&quot;</span>);</span><br><span class="line">&#125;</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>代码</strong>（一个大循环搞定版本）</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdlib.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span> &#123;</span><br><span class="line"><span class="type">int</span> n;</span><br><span class="line"><span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;n);</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = -n+<span class="number">1</span> ; i &lt; n ; i ++) &#123;</span><br><span class="line"><span class="type">int</span> l = n - <span class="built_in">abs</span>(i);</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> space = n - l;</span><br><span class="line"><span class="type">int</span> xing = l;</span><br><span class="line">        </span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> j = <span class="number">0</span> ; j &lt; space ; j ++) &#123;</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot; &quot;</span>);</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> j = <span class="number">0</span> ; j &lt; xing ; j ++) &#123;</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;*&quot;</span>);</span><br><span class="line">&#125;</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="勾股数">18051 勾股数</h3><p><strong>Description</strong></p><p>若三个正整数 <span class="math inline"><em>a</em>、<em>b</em>、<em>c</em></span> ，其中 <span class="math inline"><em>a</em> ≤ <em>b</em> ≤ <em>c</em></span> ，满足 <span class="math inline"><em>a</em><sup>2</sup> + <em>b</em><sup>2</sup> = <em>c</em><sup>2</sup></span> ，称这三个数为“勾股数”，例如：<span class="math inline">3、4、5</span> 是勾股数。编程输出不大于 <span class="math inline"><em>n</em></span> 的所有勾股数。</p><p><strong>输入格式</strong></p><p>输入一个数 <span class="math inline">(<em>n</em> &lt;  = 100)</span></p><p><strong>输出格式</strong></p><p>输出所有勾股数，按第 <span class="math inline">1</span> 个数字由小到大排列（若第 <span class="math inline">1</span> 个数字相同，按第 <span class="math inline">2</span> 个数字排）</p><p><strong>输入样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">16</span><br></pre></td></tr></table></figure><p><strong>输出样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">3 4 5</span><br><span class="line">5 12 13</span><br><span class="line">6 8 10</span><br><span class="line">9 12 15</span><br></pre></td></tr></table></figure><p><strong>题解</strong></p><p>数据太弱，直接三层大循环就解决了</p><p>可以用 <code>sqrt</code> 优化到两层大循环，但是还要判断，反正数据弱到三层能过那就三层算了</p><p><strong>代码</strong>（三层循环）</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span> &#123;</span><br><span class="line"><span class="type">int</span> n;</span><br><span class="line"><span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;n);</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">1</span> ; i &lt;= n ; i ++) &#123;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> j = i ; j &lt;= n ; j ++) &#123;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> k = j ; k &lt;= n ; k ++) &#123;</span><br><span class="line"><span class="keyword">if</span>(i*i + j*j == k*k) &#123;</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;%d %d %d\n&quot;</span>,i,j,k);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>代码</strong>（两层大循环）</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;math.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span> &#123;</span><br><span class="line"><span class="type">int</span> n;</span><br><span class="line"><span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;n);</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">1</span> ; i &lt;= n ; i ++) &#123;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> j = i ; j &lt;= n ; j ++) &#123;</span><br><span class="line"><span class="type">double</span> ans = <span class="built_in">sqrt</span>(i*i + j*j);</span><br><span class="line"><span class="keyword">if</span>((<span class="type">int</span>)ans == ans &amp;&amp; ans &lt;= n) &#123;</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;%d %d %d\n&quot;</span>,i,j,(<span class="type">int</span>)ans);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="第六章">第六章</h2><h3 id="插入数据">18052 插入数据</h3><p><strong>Description</strong></p><p>已经有一个按升序排列的数组，编写程序输入一个整数 <span class="math inline"><em>x</em></span>，把 <span class="math inline"><em>x</em></span> 插入到数组中，使数组仍然保持升序。</p><p>数组如下：</p><p><span class="math display">2  3  5  7  11  13  17  23  29  31  34  71  79  97  103</span></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> a[<span class="number">16</span>]=&#123;<span class="number">2</span>, <span class="number">3</span>, <span class="number">5</span>, <span class="number">7</span>, <span class="number">11</span>, <span class="number">13</span>, <span class="number">17</span>, <span class="number">23</span>, <span class="number">29</span>, <span class="number">31</span>, <span class="number">34</span>, <span class="number">71</span>, <span class="number">79</span>, <span class="number">97</span>, <span class="number">103</span>&#125;;</span><br><span class="line"><span class="type">void</span> <span class="title function_">display</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>; i&lt;<span class="number">16</span>; i++) <span class="built_in">printf</span>(<span class="string">&quot;%d &quot;</span>, a[i]);</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">_______________________</span><br><span class="line">    <span class="title function_">display</span><span class="params">()</span>;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>输入格式</strong></p><p>输入一个整数 <span class="math inline"><em>x</em></span></p><p><strong>输出格式</strong></p><p>输出更新后的数组元素</p><p><strong>输入样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">5</span><br></pre></td></tr></table></figure><p><strong>题解</strong></p><p>先把这个整数放到数组末尾，然后从后往前遍历：</p><p>凡是前一个元素比这个元素大的，就交换</p><p><strong>代码</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> a[<span class="number">16</span>]=&#123;<span class="number">2</span>, <span class="number">3</span>, <span class="number">5</span>, <span class="number">7</span>, <span class="number">11</span>, <span class="number">13</span>, <span class="number">17</span>, <span class="number">23</span>, <span class="number">29</span>, <span class="number">31</span>, <span class="number">34</span>, <span class="number">71</span>, <span class="number">79</span>, <span class="number">97</span>, <span class="number">103</span>&#125;;</span><br><span class="line"><span class="type">void</span> <span class="title function_">display</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>; i&lt;<span class="number">16</span>; i++) <span class="built_in">printf</span>(<span class="string">&quot;%d &quot;</span>, a[i]);</span><br><span class="line">&#125;</span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;a[<span class="number">15</span>]);</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">15</span> ; i &gt; <span class="number">0</span> ; i --) &#123;</span><br><span class="line"><span class="keyword">if</span>(a[i] &lt; a[i<span class="number">-1</span>]) &#123;</span><br><span class="line"><span class="type">int</span> temp = a[i];</span><br><span class="line">a[i] = a[i<span class="number">-1</span>];</span><br><span class="line">a[i<span class="number">-1</span>] = temp;</span><br><span class="line">&#125;</span><br><span class="line">&#125; </span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">    display();</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="大于平均分">18053 大于平均分</h3><p><strong>Description</strong></p><p>输入 <span class="math inline">10</span> 个整数，计算它们的平均值，并统计有多少个数比平均值大。</p><p><strong>输入格式</strong></p><p><span class="math inline">10</span> 个整数</p><p><strong>输出格式</strong></p><p>比平均值大的数的个数</p><p><strong>输入样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">0 1 2 3 4 5 6 7 8 9</span><br></pre></td></tr></table></figure><p><strong>输出样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">5</span><br></pre></td></tr></table></figure><p><strong>题解</strong></p><p>用数组存储输入</p><p>先遍历一遍数组，得出平均数</p><p>再进行比较和计数</p><p><strong>代码</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span> &#123;</span><br><span class="line"><span class="type">int</span> a[<span class="number">10</span>];</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">0</span> ; i &lt; <span class="number">10</span> ; i ++) &#123;</span><br><span class="line"><span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;a[i]);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">double</span> ave = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">0</span> ; i &lt; <span class="number">10</span> ; i ++) &#123;</span><br><span class="line">ave += a[i];</span><br><span class="line">&#125;</span><br><span class="line">ave /= <span class="number">10</span>;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> ans = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">0</span> ; i &lt; <span class="number">10</span> ; i ++) &#123;</span><br><span class="line"><span class="keyword">if</span>(a[i] &gt; ave) &#123;</span><br><span class="line">ans ++;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;%d&quot;</span>,ans);</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="输出不同的数">18054 输出不同的数</h3><p><strong>Description</strong></p><p>输入 <span class="math inline">10</span> 个整数，输出其中不同的数，即如果一个数出现了多次，只输出一次。</p><p><strong>输入格式</strong></p><p>输入 <span class="math inline">10</span> 个整数</p><p><strong>输出格式</strong></p><p>依次输出不同的数字（一行一个，从上到下依次输出先出现的数）</p><p><strong>输入样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">1 2 1 3 3 2 4 5 5 9</span><br></pre></td></tr></table></figure><p><strong>输出样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">9</span><br></pre></td></tr></table></figure><p><strong>题解</strong></p><p>开一个足够大的计数数组（比如包含 <span class="math inline">1000000</span> 个元素）</p><p>每次输入就使对应的数组元素 <span class="math inline"> + 1</span></p><p>还有在对应数组元素为 <span class="math inline">0</span> 时才打印该数字</p><p><strong>代码</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">const</span> <span class="type">int</span> N = <span class="number">1e7</span>;</span><br><span class="line"><span class="type">int</span> a[N];</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span> &#123;</span><br><span class="line"><span class="type">int</span> num;</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">0</span> ; i &lt; <span class="number">10</span> ; i ++) &#123;</span><br><span class="line"><span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;num);</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span>(a[num] == <span class="number">0</span>) &#123;</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>,num);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">a[num] ++;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="主对角线上的元素之和">18055 主对角线上的元素之和</h3><p><strong>Description</strong></p><p>输入一个 <span class="math inline">3</span> 行 <span class="math inline">4</span> 列的整数矩阵，计算并输出主对角线上的元素之和</p><p><strong>输入格式</strong></p><p><span class="math inline">3</span> 行 <span class="math inline">4</span> 列整数矩阵</p><p><strong>输出格式</strong></p><p>主对角线上的元素之和</p><p><strong>输入样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">1 2 3 4</span><br><span class="line">5 6 7 8</span><br><span class="line">9 10 11 12</span><br></pre></td></tr></table></figure><p><strong>输出样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">18</span><br></pre></td></tr></table></figure><p><strong>题解</strong></p><p>实际上只要把 <span class="math inline"><em>a</em>[0][0]</span> 、<span class="math inline"><em>a</em>[1][1]</span> 和 <span class="math inline"><em>a</em>[2][2]</span> 加起来就可以了</p><p><strong>代码</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span> &#123;</span><br><span class="line"><span class="type">int</span> a[<span class="number">3</span>][<span class="number">4</span>];</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">0</span> ; i &lt; <span class="number">3</span> ; i ++) &#123;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> j = <span class="number">0</span> ; j &lt; <span class="number">4</span> ; j ++) &#123;</span><br><span class="line"><span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;a[i][j]);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> ans = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">0</span> ; i &lt; <span class="number">3</span> ; i ++) &#123;</span><br><span class="line">ans += a[i][i];</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;%d&quot;</span>,ans);</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="找矩阵中的鞍点">1051 找矩阵中的鞍点</h3><p><strong>Description</strong> 由键盘输入一个 <span class="math inline">3 × 4</span>（ <span class="math inline">3</span> 行 <span class="math inline">4</span> 列）的数字矩阵，其中任意两个数字均不相同。要求输出该数字矩阵中的鞍点（即在矩阵行中最大，列中最小的数）。 若没有鞍点，输出“NO”字样。</p><p><strong>输入样例</strong> <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">87  90  110  98</span><br><span class="line">70  97  210  65</span><br><span class="line">99  45  120  30</span><br></pre></td></tr></table></figure> <strong>输出样例</strong> <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">110</span><br></pre></td></tr></table></figure></p><p><strong>题解</strong></p><p>从左上角到右下角依次遍历</p><p>看看有没有是鞍点的元素</p><p>如果有就直接输出 并 <code>return 0;</code></p><p>如果没有就直接输出 <code>NO</code></p><p><strong>代码</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span> &#123;</span><br><span class="line"><span class="type">int</span> a[<span class="number">3</span>][<span class="number">4</span>];</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">0</span> ; i &lt; <span class="number">3</span> ; i ++) &#123;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> j = <span class="number">0</span> ; j &lt; <span class="number">4</span> ; j ++) &#123;</span><br><span class="line"><span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;a[i][j]);</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">0</span> ; i &lt; <span class="number">3</span> ; i ++) &#123;</span><br><span class="line"><span class="type">int</span> max = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> j = <span class="number">0</span> ; j &lt; <span class="number">4</span> ; j ++) &#123;</span><br><span class="line"><span class="keyword">if</span>(a[i][max] &lt; a[i][j]) &#123;</span><br><span class="line">max = j;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> min = i;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> j = <span class="number">0</span> ; j &lt; <span class="number">3</span> ; j ++) &#123;</span><br><span class="line"><span class="keyword">if</span>(a[min][max] &gt; a[j][max]) &#123;</span><br><span class="line">min = j;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span>(min == i) &#123;</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;%d&quot;</span>,a[min][max]);</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;NO&quot;</span>);</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="字母统计">18056 字母统计</h3><p><strong>Description</strong></p><p>输入三行字符串（每行以换行回车为结束符），每行不超过 <span class="math inline">80</span> 个字符。统计并输出其有多少个大写字母。</p><p><strong>输入格式</strong></p><p>三行字符串</p><p><strong>输出格式</strong></p><p>大写字母个数</p><p><strong>输入样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">A-1 123</span><br><span class="line">ABC abc</span><br><span class="line">G</span><br></pre></td></tr></table></figure><p><strong>输出样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">5</span><br></pre></td></tr></table></figure><p><strong>题解</strong></p><p>首先，我们需要一个对应字符的 <span class="math inline"><em>A</em><em>S</em><em>C</em><em>I</em><em>I</em></span> 码的计数数组</p><p>其次，其实不用按字符串输入，只需要当换行符对应的计数数组到达 <span class="math inline">3</span> ，就可以停止读入字符了</p><p>最后，我们只要检查从 <span class="math inline"><em>A</em></span> 到 <span class="math inline"><em>Z</em></span> 中间的字符出现过多少次就可以了</p><p><strong>代码</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> a[<span class="number">200</span>];</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span> &#123;</span><br><span class="line"><span class="type">char</span> ch;</span><br><span class="line"></span><br><span class="line"><span class="keyword">while</span>(ch = getchar()) &#123;</span><br><span class="line"></span><br><span class="line">a[ch] ++;</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span>(a[<span class="string">&#x27;\n&#x27;</span>] &gt;= <span class="number">3</span>) &#123;</span><br><span class="line"><span class="keyword">break</span>;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> ans = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="string">&#x27;A&#x27;</span> ; i &lt;= <span class="string">&#x27;Z&#x27;</span> ; i ++) &#123;</span><br><span class="line">ans += a[i];</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;%d&quot;</span>,ans);</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="回文串">1145 回文串</h3><p><strong>Description</strong></p><p>读入一行字符串（不多于 <span class="math inline">80</span> 个字符，以回车结束），判断该字符串是否为回文串（即从左向右拼写与从右向左拼写是一样的），是则输出 <span class="math inline"><em>Y</em></span> ，不是则输出 <span class="math inline"><em>N</em></span> 。</p><p><strong>输入格式</strong></p><p>一行字符串</p><p><strong>输出格式</strong></p><p>是则输出 <span class="math inline"><em>Y</em></span> ，不是则输出 <span class="math inline"><em>N</em></span></p><p><strong>输入样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">abba</span><br></pre></td></tr></table></figure><p><strong>输出样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Y</span><br></pre></td></tr></table></figure><p><strong>题解</strong></p><p>先确定字符串长度</p><p>然后左右两边不断比较，往中间缩进</p><p>这种也叫双指针算法</p><p><strong>代码</strong> <figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;string.h&gt;</span></span></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span> &#123;</span><br><span class="line"><span class="type">char</span> a[<span class="number">100</span>];</span><br><span class="line"><span class="built_in">scanf</span>(<span class="string">&quot;%s&quot;</span>,&amp;a);</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> l = <span class="built_in">strlen</span>(a);</span><br><span class="line"><span class="type">int</span> left = <span class="number">0</span> , right = l<span class="number">-1</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">while</span>(left &lt; right) &#123;</span><br><span class="line"><span class="keyword">if</span>(a[left] != a[right]) &#123;</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;N&quot;</span>);</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">left ++;</span><br><span class="line">right --;</span><br><span class="line">&#125;</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;Y&quot;</span>);</span><br><span class="line"></span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure></p><h3 id="ascii码值之和的差">18057 ASCII码值之和的差</h3><p><strong>Description</strong></p><p>输入两个字符串 <span class="math inline"><em>s</em>1</span> 和 <span class="math inline"><em>s</em>2</span> (每个串占一行，以换行回车符结束)，计算两个字符串的所有字符的 <span class="math inline"><em>A</em><em>S</em><em>C</em><em>I</em><em>I</em></span> 码值之和的差。</p><p><strong>输入格式</strong></p><p>两行字符，每行字符不超过 <span class="math inline">80</span> 个字符</p><p><strong>输出格式</strong></p><p><span class="math inline"><em>A</em><em>S</em><em>C</em><em>I</em><em>I</em></span> 码值之和的差</p><p><strong>输入样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">234</span><br><span class="line">123</span><br></pre></td></tr></table></figure><p><strong>输出样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">3</span><br></pre></td></tr></table></figure><p><strong>题解</strong></p><p>其实这题我真的很想喷他</p><p>因为他的题目真的没有交代清楚</p><p><strong>注意！</strong> 这里的差值<strong>不是差的绝对值</strong></p><p><strong>就是第一个减去第二个！</strong></p><p>那就其实直接遍历求和再相减就可以了</p><p>（但是下面的gets不能换成scanf，我也不知道为什么）</p><p><strong>代码</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;string.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span> &#123;</span><br><span class="line"><span class="type">char</span> a[<span class="number">100</span>],b[<span class="number">100</span>];</span><br><span class="line">gets(a);</span><br><span class="line">gets(b);</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> l1 = <span class="built_in">strlen</span>(a);</span><br><span class="line"><span class="type">int</span> l2 = <span class="built_in">strlen</span>(b);</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> ans1 = <span class="number">0</span>;</span><br><span class="line"><span class="type">int</span> ans2 = <span class="number">0</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">0</span> ; i &lt; l1 ; i ++) &#123;</span><br><span class="line">ans1 += a[i];</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">0</span> ; i &lt; l2 ; i ++) &#123;</span><br><span class="line">ans2 += b[i];</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;%d&quot;</span>,ans1 - ans2);</span><br><span class="line"></span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="第七章">第七章</h2><h3 id="所有数字之和">18065 所有数字之和</h3><p><strong>Description</strong></p><p>编写一个函数，计算一个整数的所有数字之和</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&quot;stdio.h&quot;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">sum</span><span class="params">(<span class="type">int</span> n)</span></span><br><span class="line">&#123;</span><br><span class="line">    _______________________</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">main()</span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> n;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;n);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d&quot;</span>, sum(n));</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>输入格式</strong></p><p>由键盘输入一个整数</p><p><strong>输出格式</strong></p><p>输出该数各位数字之和</p><p><strong>输入样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">123</span><br></pre></td></tr></table></figure><p><strong>输出样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">6</span><br></pre></td></tr></table></figure><p><strong>题解</strong></p><p>每次操作把最后那一位数提取出来（对10取模）</p><p>然后把那一位数删去（除以10）</p><p>直到当前数字为0</p><p><strong>代码</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&quot;stdio.h&quot;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">sum</span><span class="params">(<span class="type">int</span> n)</span></span><br><span class="line">&#123;</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> ans = <span class="number">0</span>;</span><br><span class="line">   <span class="keyword">while</span>(n) &#123;</span><br><span class="line">   ans += n % <span class="number">10</span>;</span><br><span class="line">   n /= <span class="number">10</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> ans;</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">main()</span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> n;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;n);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d&quot;</span>, sum(n));</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="元音字母">18066 元音字母</h3><p><strong>Description</strong></p><p>编写一个函数，挑选一个字符串中的所有元音字母构成并返回一个新的字符串</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&quot;stdio.h&quot;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">yuan</span><span class="params">(<span class="type">char</span> *s,<span class="type">char</span> *s2)</span></span><br><span class="line">&#123;</span><br><span class="line">_______________________</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">main()</span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">char</span> str[<span class="number">81</span>], str2[<span class="number">81</span>];</span><br><span class="line">    gets(str);</span><br><span class="line">    yuan(str,str2);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%s&quot;</span>, str2);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>输入格式</strong></p><p>由键盘输入一行字符，以’’结束</p><p><strong>输出格式</strong></p><p>输出新构成的字符串</p><p><strong>输入样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">I am good</span><br></pre></td></tr></table></figure><p><strong>输出样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Iaoo</span><br></pre></td></tr></table></figure><p><strong>题解</strong></p><p>直接把 aeiouAEIOU 单独拉出来</p><p>当出现以上数字的字符就把他单独放进一个新的字符串里面</p><p>记得最后放上空字符\0</p><p><strong>代码</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&quot;stdio.h&quot;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">yuan</span><span class="params">(<span class="type">char</span> *s,<span class="type">char</span> *s2)</span></span><br><span class="line">&#123;</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> l = <span class="number">0</span>;</span><br><span class="line"><span class="type">int</span> idx = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">while</span>(s[l] != <span class="string">&#x27;\0&#x27;</span>) &#123;</span><br><span class="line"><span class="keyword">if</span>(s[l] == <span class="string">&#x27;a&#x27;</span> || </span><br><span class="line">s[l] == <span class="string">&#x27;e&#x27;</span> || </span><br><span class="line">s[l] == <span class="string">&#x27;i&#x27;</span> || </span><br><span class="line">s[l] == <span class="string">&#x27;o&#x27;</span> || </span><br><span class="line">s[l] == <span class="string">&#x27;u&#x27;</span> || </span><br><span class="line">s[l] == <span class="string">&#x27;A&#x27;</span> || </span><br><span class="line">s[l] == <span class="string">&#x27;E&#x27;</span> || </span><br><span class="line">s[l] == <span class="string">&#x27;I&#x27;</span> || </span><br><span class="line">s[l] == <span class="string">&#x27;O&#x27;</span> || </span><br><span class="line">s[l] == <span class="string">&#x27;U&#x27;</span>) &#123;</span><br><span class="line">s2[idx] = s[l];</span><br><span class="line">idx ++;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">l ++;</span><br><span class="line">&#125;</span><br><span class="line">s2[idx] = <span class="string">&#x27;\0&#x27;</span>;</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">main()</span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">char</span> str[<span class="number">81</span>], str2[<span class="number">81</span>];</span><br><span class="line">    gets(str);</span><br><span class="line">    yuan(str,str2);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%s&quot;</span>, str2);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="字符统计">18067 字符统计</h3><p><strong>Description</strong></p><p>编写一个函数，统计一个字符串中字母、数字和空格的个数。使用全局变量存放字母和数字个数，函数返回值是空格个数</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;string.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;math.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> nL=<span class="number">0</span>, nN=<span class="number">0</span>;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">statistics</span><span class="params">(<span class="type">char</span> *s)</span></span><br><span class="line">&#123;</span><br><span class="line">    _______________________</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">char</span> s[<span class="number">81</span>];</span><br><span class="line">    <span class="type">int</span> nS;</span><br><span class="line">    gets(s);</span><br><span class="line">    nS = statistics(s);</span><br><span class="line"></span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d %d %d\n&quot;</span>, nL, nN, nS);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>输入格式</strong></p><p>输入一行字符，以’’符结束</p><p><strong>输出格式</strong></p><p>统计结果</p><p><strong>输入样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Ab 45</span><br></pre></td></tr></table></figure><p><strong>输出样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">2 2 1</span><br></pre></td></tr></table></figure><p><strong>题解</strong></p><p>还是一样，遍历一下计数就好了</p><p><strong>代码</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;string.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;math.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> nL=<span class="number">0</span>, nN=<span class="number">0</span>;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">statistics</span><span class="params">(<span class="type">char</span> *s)</span></span><br><span class="line">&#123;</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> l = <span class="built_in">strlen</span>(s);</span><br><span class="line">   <span class="type">int</span> res = <span class="number">0</span>;</span><br><span class="line">   </span><br><span class="line">   <span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">0</span> ; i &lt; n ; i ++) &#123;</span><br><span class="line">   <span class="keyword">if</span>(s[i] &gt;= <span class="string">&#x27;0&#x27;</span> &amp;&amp; s[i] &lt;= <span class="string">&#x27;9&#x27;</span>) &#123;</span><br><span class="line">   nN ++;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">else</span> <span class="keyword">if</span>(s[i] &gt;= <span class="string">&#x27;a&#x27;</span> &amp;&amp; s[i] &lt;= <span class="string">&#x27;z&#x27;</span>) &#123;</span><br><span class="line">nL ++;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">else</span> <span class="keyword">if</span>(s[i] &gt;= <span class="string">&#x27;A&#x27;</span> &amp;&amp; s[i] &lt;= <span class="string">&#x27;Z&#x27;</span>) &#123;</span><br><span class="line">nL ++;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">else</span> <span class="keyword">if</span>(s[i] == <span class="string">&#x27; &#x27;</span>) &#123;</span><br><span class="line">res ++;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">return</span> res;<span class="type">int</span> l = <span class="built_in">strlen</span>(s);</span><br><span class="line">   <span class="type">int</span> res = <span class="number">0</span>;</span><br><span class="line">   </span><br><span class="line">   <span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">0</span> ; i &lt; l ; i ++) &#123;</span><br><span class="line">   <span class="keyword">if</span>(s[i] &gt;= <span class="string">&#x27;0&#x27;</span> &amp;&amp; s[i] &lt;= <span class="string">&#x27;9&#x27;</span>) &#123;</span><br><span class="line">   nN ++;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">else</span> <span class="keyword">if</span>(s[i] &gt;= <span class="string">&#x27;a&#x27;</span> &amp;&amp; s[i] &lt;= <span class="string">&#x27;z&#x27;</span>) &#123;</span><br><span class="line">nL ++;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">else</span> <span class="keyword">if</span>(s[i] &gt;= <span class="string">&#x27;A&#x27;</span> &amp;&amp; s[i] &lt;= <span class="string">&#x27;Z&#x27;</span>) &#123;</span><br><span class="line">nL ++;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">else</span> <span class="keyword">if</span>(s[i] == <span class="string">&#x27; &#x27;</span>) &#123;</span><br><span class="line">res ++;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">return</span> res;</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">char</span> s[<span class="number">81</span>];</span><br><span class="line">    <span class="type">int</span> nS;</span><br><span class="line">    gets(s);</span><br><span class="line">    nS = statistics(s);</span><br><span class="line"></span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d %d %d\n&quot;</span>, nL, nN, nS);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="选择排序">18068 选择排序</h3><p><strong>Description</strong></p><p>输入10个整数，编写一个实现对数组进行选择排序的函数</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">sort</span><span class="params">(<span class="type">int</span> a[], <span class="type">int</span> n)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,j,k,tmp;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;n<span class="number">-1</span>; i++)</span><br><span class="line">    &#123;</span><br><span class="line">        k=i;</span><br><span class="line">        <span class="keyword">for</span>(_______________________)</span><br><span class="line">            <span class="keyword">if</span>(_______________________) k=j;</span><br><span class="line">        tmp=a[k];a[k]=a[i];a[i]=tmp;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a[<span class="number">10</span>];</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>; i&lt;<span class="number">10</span>; i++) <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;a[i]);</span><br><span class="line">    sort(a,<span class="number">10</span>);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>; i&lt;<span class="number">10</span>; i++) <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>, a[i]);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>输入格式</strong></p><p><span class="math inline">10</span> 个整数，以空格分隔</p><p><strong>输出格式</strong></p><p>排序后的 <span class="math inline">10</span> 个整数，一行一个数字</p><p><strong>输入样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">3 2 1 6 5 4 9 8 7 0</span><br></pre></td></tr></table></figure><p><strong>输出样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">0</span><br><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td></tr></table></figure><p><strong>题解</strong></p><p>选择排序的思路就是:</p><p>在未被排序的数字里找到最大/最小的数字</p><p>然后放在这一堆数字的最前面/最后面</p><p>以此往复，直到只剩下一个数字（就已经自动排好序了）</p><p><strong>代码</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">sort</span><span class="params">(<span class="type">int</span> a[], <span class="type">int</span> n)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,j,k,tmp;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>;i&lt;n<span class="number">-1</span>; i++)</span><br><span class="line">    &#123;</span><br><span class="line">        k=i;</span><br><span class="line">        <span class="keyword">for</span>(j = i ; j &lt; n ; j ++<span class="comment">/*方框1*/</span>)</span><br><span class="line">            <span class="keyword">if</span>(a[k] &gt; a[j]<span class="comment">/*方框2*/</span>) k=j;</span><br><span class="line">        tmp=a[k];a[k]=a[i];a[i]=tmp;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a[<span class="number">10</span>];</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>; i&lt;<span class="number">10</span>; i++) <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;a[i]);</span><br><span class="line">    sort(a,<span class="number">10</span>);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>; i&lt;<span class="number">10</span>; i++) <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>, a[i]);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="x的n次方">18069 x的n次方</h3><p><strong>Description</strong></p><p>输入正整数x和n，编写递归函数求x的n次方。</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">F</span><span class="params">(<span class="type">int</span> x, <span class="type">int</span> n)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="keyword">if</span>(_____________) </span><br><span class="line">    <span class="keyword">return</span> _____________;</span><br><span class="line">    <span class="keyword">else</span> </span><br><span class="line">    <span class="keyword">return</span> _____________;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> x, n;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d%d&quot;</span>, &amp;x, &amp;n);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d&quot;</span>, F(x, n));</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>输入格式</strong></p><p>两个正整数，<span class="math inline"><em>x</em></span> 和 <span class="math inline"><em>n</em></span></p><p><strong>输出格式</strong></p><p><span class="math inline"><em>x</em></span> 的 <span class="math inline"><em>n</em></span> 次方，假定结果不会超过 <span class="math inline">10</span> 的次方。</p><p><strong>输入样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">5 2</span><br></pre></td></tr></table></figure><p><strong>输出样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">25</span><br></pre></td></tr></table></figure><p><strong>题解</strong></p><p>一开始还以为是快速幂，后来发现一个 <code>if-else</code> 构造不出来</p><p>其实只要指数一直递减去递归，然后在指数为1的时候返回原数字，在回溯的时候把上一个数字乘上来就好了</p><p><strong>代码</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">F</span><span class="params">(<span class="type">int</span> x, <span class="type">int</span> n)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="keyword">if</span>(n == <span class="number">1</span><span class="comment">/*方框1*/</span>) </span><br><span class="line">    <span class="keyword">return</span> x<span class="comment">/*方框2*/</span>;</span><br><span class="line">    <span class="keyword">else</span> </span><br><span class="line">    <span class="keyword">return</span> F(x,n<span class="number">-1</span>) * x <span class="comment">/*方框3*/</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> x, n;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d%d&quot;</span>, &amp;x, &amp;n);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d&quot;</span>, F(x, n));</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="矩阵行交换或列交换">18070 矩阵行交换或列交换</h3><p><strong>Description</strong></p><p>输入一个 <span class="math inline">4 × 4</span> 矩阵，编写两个函数分别实现对二维数组元素的行与行进行交换，以及列与列进行交换</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">swap</span><span class="params">(<span class="type">int</span> *a, <span class="type">int</span> *b)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> temp;</span><br><span class="line">    temp=*a;*a=*b;*b=temp;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">col</span><span class="params">(<span class="type">int</span> a[][<span class="number">4</span>], <span class="type">int</span> i, <span class="type">int</span> j)</span></span><br><span class="line">&#123;</span><br><span class="line">    _______________________</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">row</span><span class="params">(<span class="type">int</span> a[][<span class="number">4</span>], <span class="type">int</span> i, <span class="type">int</span> j)</span></span><br><span class="line">&#123;</span><br><span class="line">    _______________________</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a[<span class="number">4</span>][<span class="number">4</span>];</span><br><span class="line">    <span class="type">int</span> i,j;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>; i&lt;<span class="number">4</span>; i++)</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>; j&lt;<span class="number">4</span>; j++)</span><br><span class="line">            <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;a[i][j]);</span><br><span class="line">    col(a,<span class="number">0</span>,<span class="number">2</span>);</span><br><span class="line">    row(a,<span class="number">0</span>,<span class="number">2</span>);</span><br><span class="line">    col(a,<span class="number">1</span>,<span class="number">3</span>);</span><br><span class="line">    row(a,<span class="number">1</span>,<span class="number">3</span>);</span><br><span class="line">    col(a,<span class="number">0</span>,<span class="number">3</span>);</span><br><span class="line">    row(a,<span class="number">0</span>,<span class="number">3</span>);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>; i&lt;<span class="number">4</span>; i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>; j&lt;<span class="number">4</span>; j++)</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;%d &quot;</span>, a[i][j]);</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>输入格式</strong></p><p>输入一个 <span class="math inline">4 × 4</span>矩阵</p><p><strong>输出格式</strong></p><p>输出经过变换的矩阵</p><p><strong>输入样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">1 2 3 4</span><br><span class="line">5 6 7 8</span><br><span class="line">9 10 11 12</span><br><span class="line">13 14 15 16</span><br></pre></td></tr></table></figure><p><strong>输出样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">6 8 5 7</span><br><span class="line">14 16 13 15</span><br><span class="line">2 4 1 3</span><br><span class="line">10 12 9 11</span><br></pre></td></tr></table></figure><p><strong>题解</strong></p><p>暴力去写就好了，把每一行/每一列的每个值都交换</p><p><strong>代码</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">swap</span><span class="params">(<span class="type">int</span> *a, <span class="type">int</span> *b)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> temp;</span><br><span class="line">    temp=*a;*a=*b;*b=temp;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">col</span><span class="params">(<span class="type">int</span> a[][<span class="number">4</span>], <span class="type">int</span> i, <span class="type">int</span> j)</span></span><br><span class="line">&#123;</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">   <span class="keyword">for</span>(<span class="type">int</span> k = <span class="number">0</span> ; k &lt; <span class="number">4</span> ; k ++) &#123;</span><br><span class="line">   <span class="type">int</span> temp = a[i][k];</span><br><span class="line">   a[i][k] = a[j][k];</span><br><span class="line">   a[j][k] = temp;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">row</span><span class="params">(<span class="type">int</span> a[][<span class="number">4</span>], <span class="type">int</span> i, <span class="type">int</span> j)</span></span><br><span class="line">&#123;</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">   <span class="keyword">for</span>(<span class="type">int</span> k = <span class="number">0</span> ; k &lt; <span class="number">4</span> ; k ++) &#123;</span><br><span class="line">   <span class="type">int</span> temp = a[k][i];</span><br><span class="line">   a[k][i] = a[k][j];</span><br><span class="line">   a[k][j] = temp;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a[<span class="number">4</span>][<span class="number">4</span>];</span><br><span class="line">    <span class="type">int</span> i,j;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>; i&lt;<span class="number">4</span>; i++)</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>; j&lt;<span class="number">4</span>; j++)</span><br><span class="line">            <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;a[i][j]);</span><br><span class="line">    col(a,<span class="number">0</span>,<span class="number">2</span>);</span><br><span class="line">    row(a,<span class="number">0</span>,<span class="number">2</span>);</span><br><span class="line">    col(a,<span class="number">1</span>,<span class="number">3</span>);</span><br><span class="line">    row(a,<span class="number">1</span>,<span class="number">3</span>);</span><br><span class="line">    col(a,<span class="number">0</span>,<span class="number">3</span>);</span><br><span class="line">    row(a,<span class="number">0</span>,<span class="number">3</span>);</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>; i&lt;<span class="number">4</span>; i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>; j&lt;<span class="number">4</span>; j++)</span><br><span class="line">            <span class="built_in">printf</span>(<span class="string">&quot;%d &quot;</span>, a[i][j]);</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="学生信息统计">18071 学生信息统计</h3><p><strong>Description</strong></p><p>输入 <span class="math inline">10</span> 个学生 <span class="math inline">5</span> 门课的考试成绩，分别用函数实现以下功能：</p><ol type="1"><li><p>计算一个学生的平均分。</p></li><li><p>计算每门课程的平均分。</p></li><li><p>找出每门课程的最高分。</p></li></ol><p>显示结果，显示两位小数。</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">average</span><span class="params">(<span class="type">double</span> a[][<span class="number">5</span>], <span class="type">int</span> n)</span></span><br><span class="line">&#123;</span><br><span class="line">_______________________</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">average2</span><span class="params">(<span class="type">double</span> a[][<span class="number">5</span>], <span class="type">int</span> n)</span></span><br><span class="line">&#123;</span><br><span class="line">_______________________</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">top</span><span class="params">(<span class="type">double</span> a[][<span class="number">5</span>], <span class="type">int</span> n)</span></span><br><span class="line">&#123;</span><br><span class="line">_______________________</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">double</span> a[<span class="number">10</span>][<span class="number">5</span>];</span><br><span class="line">    <span class="type">int</span> i, j;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>; i&lt;<span class="number">10</span>; i++)</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>; j&lt;<span class="number">5</span>; j++)</span><br><span class="line">            <span class="built_in">scanf</span>(<span class="string">&quot;%lf&quot;</span>, &amp;a[i][j]);</span><br><span class="line">    average(a,<span class="number">10</span>);</span><br><span class="line">    average2(a,<span class="number">10</span>);</span><br><span class="line">    top(a,<span class="number">10</span>);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>输入格式</strong></p><p>输入 <span class="math inline">10</span> 个学生 <span class="math inline">5</span> 门课成绩</p><p><strong>输出格式</strong></p><p>输出每个学生的平均分，以空格分隔</p><p>输出每门课的平均分，以空格分隔</p><p>输出每门课的最高分，以空格分隔</p><p><strong>输入样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">79 61 57 70 77</span><br><span class="line">67 73 83 72 70</span><br><span class="line">82 59 85 84 80</span><br><span class="line">80 53 67 72 79</span><br><span class="line">80 59 72 92 84</span><br><span class="line">88 72 79 79 80</span><br><span class="line">76 99 82 73 97</span><br><span class="line">67 96 81 69 63</span><br><span class="line">58 80 98 93 84</span><br><span class="line">66 61 64 57 64</span><br></pre></td></tr></table></figure><p><strong>输出样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">68.80 73.00 78.00 70.20 77.40 79.60 85.40 75.20 82.60 62.40 </span><br><span class="line">74.30 71.30 76.80 76.10 77.80 </span><br><span class="line">88.00 99.00 98.00 93.00 97.00 </span><br></pre></td></tr></table></figure><p><strong>题解</strong></p><p>只要在对应的行或者列遍历一遍，计算结果后，直接输出即可（不要忘记换行）</p><p><strong>代码</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">average</span><span class="params">(<span class="type">double</span> a[][<span class="number">5</span>], <span class="type">int</span> n)</span></span><br><span class="line">&#123;</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">0</span> ; i &lt; <span class="number">10</span> ; i ++) &#123;</span><br><span class="line"><span class="type">double</span> ans = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> j = <span class="number">0</span> ; j &lt; <span class="number">5</span> ; j ++) &#123;</span><br><span class="line">ans += a[i][j];</span><br><span class="line">&#125;</span><br><span class="line">ans /= <span class="number">5</span>;</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;%.2f &quot;</span>,ans);</span><br><span class="line">&#125;</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">average2</span><span class="params">(<span class="type">double</span> a[][<span class="number">5</span>], <span class="type">int</span> n)</span></span><br><span class="line">&#123;</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">0</span> ; i &lt; <span class="number">5</span> ; i ++) &#123;</span><br><span class="line"><span class="type">double</span> ans = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> j = <span class="number">0</span> ; j &lt; <span class="number">10</span> ; j ++) &#123;</span><br><span class="line">ans += a[j][i];</span><br><span class="line">&#125;</span><br><span class="line">ans /= <span class="number">10</span>;</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;%.2f &quot;</span>,ans);</span><br><span class="line">&#125;</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">top</span><span class="params">(<span class="type">double</span> a[][<span class="number">5</span>], <span class="type">int</span> n)</span></span><br><span class="line">&#123;</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">0</span> ; i &lt; <span class="number">5</span> ; i ++) &#123;</span><br><span class="line"><span class="type">double</span> max = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> j = <span class="number">0</span> ; j &lt; <span class="number">10</span> ; j ++) &#123;</span><br><span class="line"><span class="keyword">if</span>(max &lt; a[j][i]) &#123;</span><br><span class="line">max = a[j][i];</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;%.2f &quot;</span>,max);</span><br><span class="line">&#125;</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">double</span> a[<span class="number">10</span>][<span class="number">5</span>];</span><br><span class="line">    <span class="type">int</span> i, j;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>; i&lt;<span class="number">10</span>; i++)</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>; j&lt;<span class="number">5</span>; j++)</span><br><span class="line">            <span class="built_in">scanf</span>(<span class="string">&quot;%lf&quot;</span>, &amp;a[i][j]);</span><br><span class="line">    average(a,<span class="number">10</span>);</span><br><span class="line">    average2(a,<span class="number">10</span>);</span><br><span class="line">    top(a,<span class="number">10</span>);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="第八章">第八章</h2><h3 id="一年的第几天">18058 一年的第几天</h3><p><strong>Description</strong></p><p>定义一个结构体类型表示日期类型（包括年、月、日）。程序中定义一个日期类型的变量，输入该日期的年、月、日，计算并输出该日期是一年的第几天。</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">DATE</span></span></span><br><span class="line"><span class="class">&#123;</span></span><br><span class="line">_______________________</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">days</span><span class="params">(<span class="keyword">struct</span> DATE date)</span></span><br><span class="line">&#123;</span><br><span class="line">_______________________</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="class"><span class="keyword">struct</span> <span class="title">DATE</span> <span class="title">d</span>;</span></span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d-%d-%d&quot;</span>, &amp;d.year, &amp;d.month, &amp;d.day);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d&quot;</span>, days(d));</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>输入格式</strong></p><p>年月日，格式如样例</p><p><strong>输出格式</strong></p><p>该年的第几天</p><p><strong>输入样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">2015-1-1</span><br></pre></td></tr></table></figure><p><strong>输出样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">1</span><br></pre></td></tr></table></figure><p><strong>题解</strong></p><p>因为以你那最多也就 <span class="math inline">366</span> 天，我们可以从第一天开始遍历计数，直到现在这天就停止遍历计数就可以了</p><p>比较麻烦的是计算闰年的地方，大家可以看一下我的处理方式</p><p><strong>代码</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">DATE</span></span></span><br><span class="line"><span class="class">&#123;</span></span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> year,month,day;</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">days</span><span class="params">(<span class="keyword">struct</span> DATE date)</span></span><br><span class="line">&#123;</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> ans = <span class="number">0</span>;</span><br><span class="line"><span class="type">int</span> m = <span class="number">1</span>;</span><br><span class="line"><span class="type">int</span> year = date.year;</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">1</span> ; i &lt;= <span class="number">31</span> ; i ++) &#123;</span><br><span class="line">ans ++;</span><br><span class="line"><span class="keyword">if</span>(m == date.month &amp;&amp; i == date.day) &#123;</span><br><span class="line"><span class="keyword">return</span> ans;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span>(i == <span class="number">28</span> &amp;&amp; m == <span class="number">2</span>) &#123;</span><br><span class="line"><span class="keyword">if</span>(year % <span class="number">4</span> == <span class="number">0</span>) &#123;</span><br><span class="line"><span class="keyword">if</span>(year % <span class="number">100</span> == <span class="number">0</span> &amp;&amp; year % <span class="number">400</span> != <span class="number">0</span>) &#123;</span><br><span class="line">i = <span class="number">0</span>;</span><br><span class="line">m ++;</span><br><span class="line">&#125;</span><br><span class="line">&#125; <span class="keyword">else</span> &#123;</span><br><span class="line">i = <span class="number">0</span>;</span><br><span class="line">m ++;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span>(i == <span class="number">29</span> &amp;&amp; m == <span class="number">2</span>) &#123;</span><br><span class="line"><span class="keyword">if</span>(year % <span class="number">4</span> == <span class="number">0</span>) &#123;</span><br><span class="line"><span class="keyword">if</span>(year % <span class="number">100</span> == <span class="number">0</span> &amp;&amp; year % <span class="number">400</span> != <span class="number">0</span>) &#123;</span><br><span class="line"></span><br><span class="line">&#125; <span class="keyword">else</span> &#123;</span><br><span class="line">i = <span class="number">0</span>;</span><br><span class="line">m ++;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span>(i == <span class="number">30</span>) &#123;</span><br><span class="line"><span class="keyword">if</span>(m == <span class="number">4</span> || m == <span class="number">6</span> || m == <span class="number">9</span> || m == <span class="number">11</span>) &#123;</span><br><span class="line">i = <span class="number">0</span>;</span><br><span class="line">m ++;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span>(i == <span class="number">31</span>) &#123;</span><br><span class="line"><span class="keyword">if</span>(m == <span class="number">1</span> || m == <span class="number">3</span> || m == <span class="number">5</span> || m == <span class="number">7</span> ||  m == <span class="number">8</span> || m == <span class="number">10</span> || m == <span class="number">12</span>) &#123;</span><br><span class="line">i = <span class="number">0</span>;</span><br><span class="line">m ++;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="class"><span class="keyword">struct</span> <span class="title">DATE</span> <span class="title">d</span>;</span></span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d-%d-%d&quot;</span>, &amp;d.year, &amp;d.month, &amp;d.day);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%d&quot;</span>, days(d));</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="学生成绩表">18059 学生成绩表</h3><p><strong>Description</strong></p><p>输入 <span class="math inline">10</span> 个学生，每个学生的数据包括学号、姓名、<span class="math inline">3</span> 门课的成绩。定义结构体类型表示学生类型，输入 <span class="math inline">10</span> 个学生的数据，</p><p>计算每个学生的平均成绩。按平均成绩由高到低输出所有学生信息，成绩相同时按学号从小到大输出。</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">data</span></span></span><br><span class="line"><span class="class">&#123;</span></span><br><span class="line">_______________________</span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,j;</span><br><span class="line">    <span class="class"><span class="keyword">struct</span> <span class="title">data</span> <span class="title">stu</span>[10],<span class="title">tmp</span>;</span></span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>; i&lt;<span class="number">10</span>; i++)</span><br><span class="line">    &#123;</span><br><span class="line">_______________________</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>; i&lt;<span class="number">9</span>; i++)</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>; j&lt;<span class="number">9</span>-i; j++)</span><br><span class="line">        &#123;</span><br><span class="line">_______________________</span><br><span class="line">        &#125;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>; i&lt;<span class="number">10</span>; i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d %s %.0lf %.0lf %.0lf\n&quot;</span>, stu[i].num, stu[i].name, stu[i].score[<span class="number">0</span>], stu[i].score[<span class="number">1</span>], stu[i].score[<span class="number">2</span>]);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>输入格式</strong></p><p><span class="math inline">10</span> 个学生信息，每行一个学生</p><p><strong>输出格式</strong></p><p>如题</p><p><strong>输入样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">1 aaa 50 60 70</span><br><span class="line">2 bbb 50 50 50</span><br><span class="line">3 ccc 60 70 80</span><br><span class="line">4 ddd 40 40 40 </span><br><span class="line">5 eee 70 80 90</span><br><span class="line">6 fff 30 30 30 </span><br><span class="line">7 ggg 80 90 100</span><br><span class="line">8 hhh 20 20 20</span><br><span class="line">9 iii 100 100 100</span><br><span class="line">10 jjj 10 10 10</span><br></pre></td></tr></table></figure><p><strong>输出样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">9 iii 100 100 100</span><br><span class="line">7 ggg 80 90 100</span><br><span class="line">5 eee 70 80 90</span><br><span class="line">3 ccc 60 70 80</span><br><span class="line">1 aaa 50 60 70</span><br><span class="line">2 bbb 50 50 50</span><br><span class="line">4 ddd 40 40 40 </span><br><span class="line">6 fff 30 30 30 </span><br><span class="line">8 hhh 20 20 20</span><br><span class="line">10 jjj 10 10 10</span><br></pre></td></tr></table></figure><p><strong>题解</strong></p><p><strong>注意！</strong></p><p>因为这是填空题，所以后面出现的关于结构体的变量，你在声明的时候一定要保持 <strong>变量名一致</strong>！</p><p>其次，关于排序的算法，这里其实你也改变不了他给你的算法，只能用冒泡排序，结构体可以直接交换就行</p><p><strong>代码</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">data</span></span></span><br><span class="line"><span class="class">&#123;</span></span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> num;</span><br><span class="line"><span class="type">char</span> name[<span class="number">50</span>];</span><br><span class="line"><span class="type">double</span> score[<span class="number">3</span>];</span><br><span class="line"><span class="type">double</span> ave;</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i,j;</span><br><span class="line">    <span class="class"><span class="keyword">struct</span> <span class="title">data</span> <span class="title">stu</span>[10],<span class="title">tmp</span>;</span></span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>; i&lt;<span class="number">10</span>; i++)</span><br><span class="line">    &#123;</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line"><span class="built_in">scanf</span>(<span class="string">&quot;%d%s%lf%lf%lf&quot;</span>, &amp;stu[i].num, &amp;stu[i].name, &amp;stu[i].score[<span class="number">0</span>], &amp;stu[i].score[<span class="number">1</span>], &amp;stu[i].score[<span class="number">2</span>]);</span><br><span class="line">      stu[i].ave = stu[i].score[<span class="number">0</span>] + stu[i].score[<span class="number">1</span>] + stu[i].score[<span class="number">2</span>];</span><br><span class="line">      stu[i].ave /= <span class="number">3</span>;</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">&#125;</span><br><span class="line"><span class="keyword">for</span>(i=<span class="number">0</span>; i&lt;<span class="number">9</span>; i++)</span><br><span class="line">    <span class="keyword">for</span>(j=<span class="number">0</span>; j&lt;<span class="number">9</span>-i; j++)</span><br><span class="line">    &#123;</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">if</span>(stu[j].ave &lt; stu[j + <span class="number">1</span>].ave) &#123;</span><br><span class="line">             tmp = stu[j];</span><br><span class="line">stu[j] = stu[j + <span class="number">1</span>];</span><br><span class="line">stu[j + <span class="number">1</span>] = tmp;</span><br><span class="line">         &#125;</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">        &#125;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>; i&lt;<span class="number">10</span>; i++)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d %s %.0lf %.0lf %.0lf\n&quot;</span>, stu[i].num, stu[i].name, stu[i].score[<span class="number">0</span>], stu[i].score[<span class="number">1</span>], stu[i].score[<span class="number">2</span>]);</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="删除空格">18060 删除空格</h3><p><strong>Description</strong></p><p>用指针方法解决，输入一个字符串，删除字符串中所有空格后，输出字符串</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">removeSpace</span><span class="params">(<span class="type">char</span> *s)</span></span><br><span class="line">&#123;</span><br><span class="line">_______________________</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">char</span> s[<span class="number">81</span>];</span><br><span class="line">    gets(s);</span><br><span class="line">    removeSpace(s);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%s&quot;</span>, s);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>输入格式</strong></p><p>一行字符，以换行回车结束，最多不超过80个字符</p><p><strong>输出格式</strong></p><p>删除所有空格后输出</p><p><strong>输入样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">abc    456</span><br></pre></td></tr></table></figure><p><strong>输出样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">abc456</span><br></pre></td></tr></table></figure><p><strong>题解</strong></p><p>可以去了解一下双指针算法</p><p>做一个快指针，一个慢指针，两边同向出发，遇到空格快指针就跳过，其余情况把快指针传给慢指针，直到遇到空字符为止</p><p><strong>代码</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">removeSpace</span><span class="params">(<span class="type">char</span> *s)</span></span><br><span class="line">&#123;</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br></pre></td><td class="code"><pre><span class="line"><span class="type">int</span> l = <span class="number">0</span>, r = <span class="number">0</span>;</span><br><span class="line"><span class="keyword">while</span>(<span class="number">1</span>) &#123;</span><br><span class="line"><span class="keyword">if</span>(s[r] == <span class="string">&#x27; &#x27;</span>) &#123;</span><br><span class="line">r ++;</span><br><span class="line"><span class="keyword">continue</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">s[l] = s[r];</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span>(s[r] == <span class="string">&#x27;\0&#x27;</span>) &#123;</span><br><span class="line"><span class="keyword">return</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">l ++;</span><br><span class="line">r ++;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">char</span> s[<span class="number">81</span>];</span><br><span class="line">    gets(s);</span><br><span class="line">    removeSpace(s);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;%s&quot;</span>, s);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="数的交换">18061 数的交换</h3><p><strong>Description</strong></p><p>输入 <span class="math inline">10</span> 个整数，把其中最小的数与第一个数交换，最大的数与最后一个数交换。使用 <span class="math inline">3</span> 个函数解决问题：</p><ol type="1"><li><p>输入 <span class="math inline">10</span> 个整数的函数</p></li><li><p>进行交换处理的函数</p></li><li><p>输出 <span class="math inline">10</span> 个数的函数</p></li></ol><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">input</span><span class="params">(<span class="type">int</span> a[])</span></span><br><span class="line">&#123;</span><br><span class="line">    _______________________</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">swap</span><span class="params">(<span class="type">int</span> a[])</span></span><br><span class="line">&#123;</span><br><span class="line">    _______________________</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">display</span><span class="params">(<span class="type">int</span> a[])</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>; i&lt;<span class="number">10</span>; i++)</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>, a[i]);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a[<span class="number">10</span>];</span><br><span class="line">    input(a);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;input done\n&quot;</span>);</span><br><span class="line">    swap(a);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;swap done\n&quot;</span>);</span><br><span class="line">    display(a);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;display done\n&quot;</span>);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>输入格式</strong></p><p>输入 <span class="math inline">10</span> 个整数</p><p><strong>输出格式</strong></p><p>输出结果，一行一个数字</p><p><strong>输入样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">2 1 3 4 5 6 7 8 9 0</span><br></pre></td></tr></table></figure><p><strong>输出样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><span class="line">input done</span><br><span class="line">swap done</span><br><span class="line">0</span><br><span class="line">1</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">2</span><br><span class="line">9</span><br><span class="line">display done</span><br></pre></td></tr></table></figure><p><strong>题解</strong></p><p>这题的表述很简单，但是他有一个点没有讲清楚，那就是：</p><p><strong>两个数之间只交换一次！</strong></p><p>所以我们只需要判断第二次交换的两个数是不是第一次交换得两个数就可以了</p><p>如果是，就直接返回；</p><p>如果不是，就交换</p><p><strong>特殊一点讲</strong></p><p>只要确定第一次交换的数字就是最大值和最小值，那我们就可以只交换一次了</p><p><strong>代码</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">input</span><span class="params">(<span class="type">int</span> a[])</span></span><br><span class="line">&#123;</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">   <span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">0</span> ; i &lt; <span class="number">10</span> ; i ++) &#123;</span><br><span class="line">   <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;a[i]);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">swap</span><span class="params">(<span class="type">int</span> a[])</span></span><br><span class="line">&#123;</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><span class="line">   <span class="type">int</span> max = <span class="number">0</span>,min = <span class="number">0</span>;</span><br><span class="line">   </span><br><span class="line">   <span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">0</span> ; i &lt; <span class="number">10</span> ; i ++) &#123;</span><br><span class="line">   <span class="keyword">if</span>(a[i] &lt; a[min]) min = i;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> temp = a[<span class="number">0</span>];</span><br><span class="line">a[<span class="number">0</span>] = a[min];</span><br><span class="line">a[min] = temp;</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">0</span> ; i &lt; <span class="number">10</span> ; i ++) &#123;</span><br><span class="line">   <span class="keyword">if</span>(a[i] &gt; a[max]) max = i;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">if</span>(min == <span class="number">9</span> &amp;&amp; max == <span class="number">9</span>) <span class="keyword">return</span>;</span><br><span class="line"></span><br><span class="line">temp = a[<span class="number">9</span>];</span><br><span class="line">a[<span class="number">9</span>] = a[max];</span><br><span class="line">a[max] = temp;</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">display</span><span class="params">(<span class="type">int</span> a[])</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> i;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>; i&lt;<span class="number">10</span>; i++)</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>, a[i]);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a[<span class="number">10</span>];</span><br><span class="line">    input(a);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;input done\n&quot;</span>);</span><br><span class="line">    swap(a);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;swap done\n&quot;</span>);</span><br><span class="line">    display(a);</span><br><span class="line">    <span class="built_in">printf</span>(<span class="string">&quot;display done\n&quot;</span>);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="二维数组每行中的最大值">18062 二维数组每行中的最大值</h3><p><strong>Description</strong></p><p>输入一个 <span class="math inline">4 × 4</span> 的二维整型数组，使用指针变量查找并输出二维整型数组中每一行的最大值。</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">find</span><span class="params">(<span class="type">int</span> a[][<span class="number">4</span>])</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> (*p)[<span class="number">4</span>], *q, *max;</span><br><span class="line">    <span class="keyword">for</span>(_______________________)</span><br><span class="line">    &#123;</span><br><span class="line">        max=*p;</span><br><span class="line">        <span class="keyword">for</span>(_______________________)</span><br><span class="line">        &#123;</span><br><span class="line">_______________________</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>, *max);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a[<span class="number">4</span>][<span class="number">4</span>],i,j;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>; i&lt;<span class="number">4</span>; i++)</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>; j&lt;<span class="number">4</span>; j++)</span><br><span class="line">            <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;a[i][j]);</span><br><span class="line">    find(a);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>输入格式</strong></p><p><span class="math inline">4 × 4</span> 的整数矩阵</p><p><strong>输出格式</strong></p><p>每行最大值，一行一个</p><p><strong>输入样例</strong> <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">1 2 3 4</span><br><span class="line">8 7 6 5</span><br><span class="line">1 1 1 1</span><br><span class="line">2 2 2 2</span><br></pre></td></tr></table></figure></p><p><strong>输出样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">4</span><br><span class="line">8</span><br><span class="line">1</span><br><span class="line">2</span><br></pre></td></tr></table></figure><p><strong>题解</strong></p><p>其实这题和普通的找最大值没有区别</p><p>只不过是把下标变成指针而已，还有二级指针</p><p>注意一下指针之间的比较和交换即可</p><p><strong>代码</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">find</span><span class="params">(<span class="type">int</span> a[][<span class="number">4</span>])</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> (*p)[<span class="number">4</span>], *q, *max;</span><br><span class="line">    <span class="keyword">for</span>(p = a; p &lt; a + <span class="number">4</span> ; p ++<span class="comment">/*方框1*/</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        max=*p;</span><br><span class="line">        <span class="keyword">for</span>(q = *p + <span class="number">1</span> ; q &lt; *p + <span class="number">4</span>; q ++<span class="comment">/*方框2*/</span>)</span><br><span class="line">        &#123;</span><br><span class="line"><span class="keyword">if</span>(*max &lt; *q) &#123;*max = *q;&#125; <span class="comment">/*方框3*/</span></span><br><span class="line">        &#125;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%d\n&quot;</span>, *max);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="type">int</span> a[<span class="number">4</span>][<span class="number">4</span>],i,j;</span><br><span class="line">    <span class="keyword">for</span>(i=<span class="number">0</span>; i&lt;<span class="number">4</span>; i++)</span><br><span class="line">        <span class="keyword">for</span>(j=<span class="number">0</span>; j&lt;<span class="number">4</span>; j++)</span><br><span class="line">            <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>, &amp;a[i][j]);</span><br><span class="line">    find(a);</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="圈中的游戏">18063 圈中的游戏</h3><p><strong>Description</strong></p><p>有 <span class="math inline"><em>n</em></span> 个人围成一圈，从第 <span class="math inline">1</span> 个人开始报数 <span class="math inline">1、2、3</span> ，每报到 <span class="math inline">3</span> 的人退出圈子。编程使用链表找出最后留下的人。</p><p><strong>输入格式</strong></p><p>输入一个数 <span class="math inline"><em>n</em></span> ， <span class="math inline">1000000 ≥ <em>n</em> &gt; 0</span></p><p><strong>输出格式</strong></p><p>输出最后留下的人的编号</p><p><strong>输入样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">3</span><br></pre></td></tr></table></figure><p><strong>输出样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">2</span><br></pre></td></tr></table></figure><p><strong>题解</strong></p><p>其实这是一道经典的数论题 ：约瑟夫问题，大家可以去了解一下</p><p>我当时是用的循环链表解决的</p><p>当然也有另一种更简便的写法，大家在后面也可以欣赏一下（至于这个算法的理论本身我就不给出了，大家自己去了解一下就好啦）</p><p><strong>代码</strong>（循环链表）</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">round</span></span></span><br><span class="line"><span class="class">&#123;</span></span><br><span class="line"><span class="type">int</span> num;</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">round</span> *<span class="title">next</span>;</span></span><br><span class="line">&#125; ;</span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">(<span class="type">void</span>)</span></span><br><span class="line">&#123;</span><br><span class="line"><span class="type">int</span> n;</span><br><span class="line"><span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;n);</span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">round</span> <span class="title">lin</span>[<span class="title">n</span>];</span></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">round</span> *<span class="title">head</span>=</span>&amp;lin[<span class="number">0</span>],*pt=head,*ptt;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i=<span class="number">0</span>;i&lt;n;i++)</span><br><span class="line">&#123;</span><br><span class="line">lin[i].num=i+<span class="number">1</span>;</span><br><span class="line"><span class="keyword">if</span>(i==n<span class="number">-1</span>)</span><br><span class="line">lin[i].next=&amp;lin[<span class="number">0</span>];</span><br><span class="line"><span class="keyword">else</span></span><br><span class="line">lin[i].next=&amp;lin[i+<span class="number">1</span>];</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">while</span>(head-&gt;next!=head)</span><br><span class="line">&#123;</span><br><span class="line">pt=pt-&gt;next;</span><br><span class="line">ptt=pt-&gt;next;</span><br><span class="line"><span class="keyword">if</span>(ptt==head)</span><br><span class="line">head=ptt-&gt;next;</span><br><span class="line">pt-&gt;next=ptt-&gt;next;</span><br><span class="line">pt=pt-&gt;next;</span><br><span class="line">&#125;</span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;%d&quot;</span>,head-&gt;num);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>代码</strong>（O(n)版）</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;stdio.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> <span class="title function_">main</span><span class="params">()</span></span><br><span class="line">&#123;</span><br><span class="line"><span class="type">int</span> n;</span><br><span class="line"><span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;n);</span><br><span class="line"><span class="type">int</span> f = <span class="number">0</span>;</span><br><span class="line"></span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">1</span> ; i &lt;= n ; i ++) &#123;</span><br><span class="line">f = (f + <span class="number">3</span>) % i;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="built_in">printf</span>(<span class="string">&quot;%d&quot;</span>,f+<span class="number">1</span>);</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h3 id="链表的有序合并">18064 链表的有序合并</h3><p><strong>Description</strong></p><p>已知有两个链表 <span class="math inline"><em>a</em></span> 和 <span class="math inline"><em>b</em></span> ，结点类型相同，均包括一个 <span class="math inline"><em>i</em><em>n</em><em>t</em></span> 类型的数据。编程把两个链表合并成一个，结点按升序排列。</p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&quot;stdio.h&quot;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&quot;malloc.h&quot;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> LEN sizeof(struct DATA)</span></span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">DATA</span></span></span><br><span class="line"><span class="class">&#123;</span></span><br><span class="line">     <span class="type">long</span> num;</span><br><span class="line">     <span class="class"><span class="keyword">struct</span> <span class="title">DATA</span> *<span class="title">next</span>;</span></span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="keyword">struct</span> DATA *<span class="title function_">create</span><span class="params">(<span class="type">int</span> n)</span></span><br><span class="line">&#123;</span><br><span class="line">     <span class="class"><span class="keyword">struct</span> <span class="title">DATA</span> *<span class="title">head</span>=</span><span class="literal">NULL</span>,*p1=<span class="literal">NULL</span>,*p2=<span class="literal">NULL</span>;</span><br><span class="line">     <span class="type">int</span> i;</span><br><span class="line">     <span class="keyword">for</span>(i=<span class="number">1</span>;i&lt;=n;i++)</span><br><span class="line">     &#123;  p1=(<span class="keyword">struct</span> DATA *)<span class="built_in">malloc</span>(LEN);</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%ld&quot;</span>,&amp;p1-&gt;num);</span><br><span class="line">        p1-&gt;next=<span class="literal">NULL</span>;</span><br><span class="line">        <span class="keyword">if</span>(i==<span class="number">1</span>) head=p1;</span><br><span class="line">        <span class="keyword">else</span> p2-&gt;next=p1;</span><br><span class="line">        p2=p1;</span><br><span class="line">      &#125;</span><br><span class="line">      <span class="keyword">return</span>(head);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">struct</span> DATA *<span class="title function_">merge</span><span class="params">(<span class="keyword">struct</span> DATA *head, <span class="keyword">struct</span> DATA *head2)</span></span><br><span class="line">&#123;</span><br><span class="line">    _______________________</span><br><span class="line">    <span class="keyword">return</span> head;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">struct</span> DATA *<span class="title function_">insert</span><span class="params">(<span class="keyword">struct</span> DATA *head, <span class="keyword">struct</span> DATA *d)</span></span><br><span class="line">&#123;</span><br><span class="line">    _______________________</span><br><span class="line">    <span class="keyword">return</span> head;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">struct</span> DATA *<span class="title function_">sort</span><span class="params">(<span class="keyword">struct</span> DATA *head)</span> </span><br><span class="line">&#123; </span><br><span class="line">    _______________________</span><br><span class="line">    <span class="keyword">return</span> head;</span><br><span class="line">&#125; </span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">print</span><span class="params">(<span class="keyword">struct</span> DATA *head)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="class"><span class="keyword">struct</span> <span class="title">DATA</span> *<span class="title">p</span>;</span></span><br><span class="line">    p=head;</span><br><span class="line">    <span class="keyword">while</span>(p!=<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%ld&quot;</span>,p-&gt;num);</span><br><span class="line">        p=p-&gt;next;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">main()</span><br><span class="line">&#123;</span><br><span class="line">    <span class="class"><span class="keyword">struct</span> <span class="title">DATA</span> *<span class="title">head</span>, *<span class="title">head2</span>;</span></span><br><span class="line">    <span class="type">int</span> n;</span><br><span class="line">    <span class="type">long</span> del_num;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;n);</span><br><span class="line">    head=create(n);</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;n);</span><br><span class="line">    head2=create(n);</span><br><span class="line">    head = merge(head, head2);</span><br><span class="line">    head = sort(head);</span><br><span class="line">    print(head);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><strong>输入格式</strong></p><p>第一行一个数 <span class="math inline"><em>n</em></span> ，表示第一个列表的数据个数</p><p>每二行为 <span class="math inline"><em>n</em></span> 个数</p><p>第三行为一个数 <span class="math inline"><em>m</em></span></p><p>第四行为 <span class="math inline"><em>m</em></span> 个数</p><p><strong>输出格式</strong></p><p>输出合并后的有序的数据，一行一个数</p><p><strong>输入样例</strong></p><figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">2</span><br><span class="line">4 8</span><br><span class="line">3</span><br><span class="line">9 1 5</span><br></pre></td></tr></table></figure><p><strong>输出样例</strong> <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">1</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td></tr></table></figure> <strong>题解</strong></p><p>这道题目的本意是，让我们写一个插入的函数</p><p>然后在sort的时候遍历找到应该插入的位置</p><p>然后调用这个插入函数，结构体插进去</p><p>实现“插入”排序</p><p>其实我们也可以直接把整个链表挂在前一个链表的后面</p><p>然后对整个链表进行一个排序</p><p>但是这种虽然写起来简单，省下一个函数</p><p>但是时间复杂度差，就不展示了</p><p><strong>代码</strong></p><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&quot;stdio.h&quot;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&quot;malloc.h&quot;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> LEN sizeof(struct DATA)</span></span><br><span class="line"></span><br><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">DATA</span></span></span><br><span class="line"><span class="class">&#123;</span></span><br><span class="line">     <span class="type">long</span> num;</span><br><span class="line">     <span class="class"><span class="keyword">struct</span> <span class="title">DATA</span> *<span class="title">next</span>;</span></span><br><span class="line">&#125;;</span><br><span class="line"></span><br><span class="line"><span class="keyword">struct</span> DATA *<span class="title function_">create</span><span class="params">(<span class="type">int</span> n)</span></span><br><span class="line">&#123;</span><br><span class="line">     <span class="class"><span class="keyword">struct</span> <span class="title">DATA</span> *<span class="title">head</span>=</span><span class="literal">NULL</span>,*p1=<span class="literal">NULL</span>,*p2=<span class="literal">NULL</span>;</span><br><span class="line">     <span class="type">int</span> i;</span><br><span class="line">     <span class="keyword">for</span>(i=<span class="number">1</span>;i&lt;=n;i++)</span><br><span class="line">     &#123;  p1=(<span class="keyword">struct</span> DATA *)<span class="built_in">malloc</span>(LEN);</span><br><span class="line">        <span class="built_in">scanf</span>(<span class="string">&quot;%ld&quot;</span>,&amp;p1-&gt;num);</span><br><span class="line">        p1-&gt;next=<span class="literal">NULL</span>;</span><br><span class="line">        <span class="keyword">if</span>(i==<span class="number">1</span>) head=p1;</span><br><span class="line">        <span class="keyword">else</span> p2-&gt;next=p1;</span><br><span class="line">        p2=p1;</span><br><span class="line">      &#125;</span><br><span class="line">      <span class="keyword">return</span>(head);</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">struct</span> DATA *<span class="title function_">merge</span><span class="params">(<span class="keyword">struct</span> DATA *head, <span class="keyword">struct</span> DATA *head2)</span></span><br><span class="line">&#123;</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">DATA</span> *<span class="title">p</span>;</span></span><br><span class="line">p=head;</span><br><span class="line"><span class="keyword">while</span>(p-&gt;next!=<span class="literal">NULL</span>) </span><br><span class="line">p=p-&gt;next;</span><br><span class="line">p-&gt;next = head2;</span><br><span class="line"><span class="keyword">return</span> head;</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">return</span> head;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">struct</span> DATA *<span class="title function_">insert</span><span class="params">(<span class="keyword">struct</span> DATA *head, <span class="keyword">struct</span> DATA *d)</span></span><br><span class="line">&#123;</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">DATA</span> *<span class="title">p0</span>,*<span class="title">p1</span>,*<span class="title">p2</span>;</span></span><br><span class="line">p1=head;</span><br><span class="line">p0=d;</span><br><span class="line"><span class="keyword">if</span>(head==<span class="literal">NULL</span>) &#123;</span><br><span class="line">head=p0;</span><br><span class="line">p0-&gt;next=<span class="literal">NULL</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">else</span> &#123;</span><br><span class="line"><span class="keyword">while</span>((p0-&gt;num&gt;p1-&gt;num)&amp;&amp;(p1-&gt;next!=<span class="literal">NULL</span>)) &#123;</span><br><span class="line">p2=p1;</span><br><span class="line">  p1=p1-&gt;next;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">if</span>(p0-&gt;num&lt;=p1-&gt;num) &#123; </span><br><span class="line">  <span class="keyword">if</span>(head==p1) head=p0;</span><br><span class="line">    <span class="keyword">else</span> p2-&gt;next=p0;</span><br><span class="line">    p0-&gt;next=p1;</span><br><span class="line">  &#125;</span><br><span class="line">  <span class="keyword">else</span> &#123;</span><br><span class="line">  p1-&gt;next=p0;</span><br><span class="line">  p0-&gt;next=<span class="literal">NULL</span>;</span><br><span class="line">  &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">return</span> head;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"><span class="keyword">struct</span> DATA *<span class="title function_">sort</span><span class="params">(<span class="keyword">struct</span> DATA *head)</span> </span><br><span class="line">&#123; </span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line"><span class="class"><span class="keyword">struct</span> <span class="title">DATA</span> *<span class="title">p1</span>,*<span class="title">p2</span>;</span></span><br><span class="line">p2=head;p1=head;</span><br><span class="line">p2=p2-&gt;next;</span><br><span class="line">p1-&gt;next=<span class="literal">NULL</span>;</span><br><span class="line">p1=p2;</span><br><span class="line"><span class="keyword">while</span>(p2-&gt;next!=<span class="literal">NULL</span>) &#123;</span><br><span class="line">    p2=p2-&gt;next;</span><br><span class="line">    p1-&gt;next=<span class="literal">NULL</span>;</span><br><span class="line">    head=insert(head,p1);</span><br><span class="line">    p1=p2;</span><br><span class="line">&#125;</span><br><span class="line">head=insert(head,p1);</span><br></pre></td></tr></table></figure><figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br></pre></td><td class="code"><pre><span class="line"><span class="keyword">return</span> head;</span><br><span class="line">&#125; </span><br><span class="line"></span><br><span class="line"><span class="type">void</span> <span class="title function_">print</span><span class="params">(<span class="keyword">struct</span> DATA *head)</span></span><br><span class="line">&#123;</span><br><span class="line">    <span class="class"><span class="keyword">struct</span> <span class="title">DATA</span> *<span class="title">p</span>;</span></span><br><span class="line">    p=head;</span><br><span class="line">    <span class="keyword">while</span>(p!=<span class="literal">NULL</span>)</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;%ld&quot;</span>,p-&gt;num);</span><br><span class="line">        p=p-&gt;next;</span><br><span class="line">        <span class="built_in">printf</span>(<span class="string">&quot;\n&quot;</span>);</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line">main()</span><br><span class="line">&#123;</span><br><span class="line">    <span class="class"><span class="keyword">struct</span> <span class="title">DATA</span> *<span class="title">head</span>, *<span class="title">head2</span>;</span></span><br><span class="line">    <span class="type">int</span> n;</span><br><span class="line">    <span class="type">long</span> del_num;</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;n);</span><br><span class="line">    head=create(n);</span><br><span class="line">    <span class="built_in">scanf</span>(<span class="string">&quot;%d&quot;</span>,&amp;n);</span><br><span class="line">    head2=create(n);</span><br><span class="line">    head = merge(head, head2);</span><br><span class="line">    head = sort(head);</span><br><span class="line">    print(head);</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;scau-高级程序设计语言-教材习题&quot;&gt;SCAU 高级程序设计语言 教材习题&lt;/h1&gt;
&lt;h2 id=&quot;第三章&quot;&gt;第三章&lt;/h2&gt;
&lt;h3 id=&quot;分期还款加强版&quot;&gt;18041 分期还款(加强版)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Description&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;从银行贷款金额为 &lt;span class=&quot;math inline&quot;&gt;&lt;em&gt;d&lt;/em&gt;&lt;/span&gt;，准备每月还款额为 &lt;span class=&quot;math inline&quot;&gt;&lt;em&gt;p&lt;/em&gt;&lt;/span&gt;，月利率为 &lt;span class=&quot;math inline&quot;&gt;&lt;em&gt;r&lt;/em&gt;&lt;/span&gt; 。请编写程序输入这三个数值，计算并输出多少个月能够还清贷款，输出时保留 &lt;span class=&quot;math inline&quot;&gt;1&lt;/span&gt; 位小数。 如果无法还清，请输出 “God” 计算公式如下：&lt;/p&gt;
&lt;p&gt;&lt;span class=&quot;math display&quot;&gt;$$
m = &#92;frac{&#92;log{&#92;frac{p}{p - d &#92;times r}}}{&#92;log{(1+r)}}
$$&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;输入格式&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;三个数，分别为货款金额、每月还款和月利率，以空格分隔，均为非负数，其中 &lt;span class=&quot;math inline&quot;&gt;&lt;em&gt;d&lt;/em&gt;，&lt;em&gt;p&lt;/em&gt;，&lt;em&gt;r&lt;/em&gt; &amp;gt;  = 0&lt;/span&gt;&lt;/p&gt;</summary>
    
    
    
    <category term="学习" scheme="https://jiejiejiang2004.github.io/categories/%E5%AD%A6%E4%B9%A0/"/>
    
    
    <category term="SCAU" scheme="https://jiejiejiang2004.github.io/tags/SCAU/"/>
    
  </entry>
  
  <entry>
    <title>题解：牛客周赛 Round 56（A-E）</title>
    <link href="https://jiejiejiang2004.github.io/2024/08/19/%E9%A2%98%E8%A7%A3%EF%BC%9A%E7%89%9B%E5%AE%A2%E5%91%A8%E8%B5%9B%20Round%2056%EF%BC%88A-E%EF%BC%89/"/>
    <id>https://jiejiejiang2004.github.io/2024/08/19/%E9%A2%98%E8%A7%A3%EF%BC%9A%E7%89%9B%E5%AE%A2%E5%91%A8%E8%B5%9B%20Round%2056%EF%BC%88A-E%EF%BC%89/</id>
    <published>2024-08-18T16:00:00.000Z</published>
    <updated>2025-11-25T06:24:11.109Z</updated>
    
    <content type="html"><![CDATA[<h1 id="题解牛客周赛-round-56a-e">题解：牛客周赛 Round 56（A-E）</h1><h2 id="a-面包店故事">A 面包店故事</h2><h3 id="题面">题面</h3><p>小镇上有一家面包店，面包以 <span class="math inline"><em>x</em></span> 元的价格出售，加 <span class="math inline"><em>y</em></span> 元可以多加几块培根。小歪带着 <span class="math inline"><em>n</em></span> 元来到了面包店，他想知道自己能不能买到加培根的面包？</p><h3 id="输入">输入</h3><p>在一行上输入三个整数 <span class="math inline"><em>x</em>, <em>y</em>, <em>n</em>(1≤<em>x</em>,<em>y</em>,<em>n</em>≤100)</span> 代表面包的价格、培根的价格和小歪带的钱。</p><h3 id="输出">输出</h3><p>如果小歪能加到培根，在一行上输出 <code>YES</code> ；否则，直接输出 <code>NO</code> 。</p><h3 id="样例1">样例1</h3><p><strong>输入</strong> <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">3 1 5</span><br></pre></td></tr></table></figure></p><span id="more"></span><p><strong>输出</strong> <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">YES</span><br></pre></td></tr></table></figure></p><p><strong>说明</strong> 面包加培根一共 <span class="math inline">4</span> 元，小歪带了 <span class="math inline">5</span> 元，他可以吃到培根！</p><h3 id="样例2">样例2</h3><p><strong>输入</strong> <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">10 1 10</span><br></pre></td></tr></table></figure></p><p><strong>输出</strong> <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">NO</span><br></pre></td></tr></table></figure></p><p><strong>说明</strong> 面包加培根一共 <span class="math inline">11</span> 元，小歪带了 <span class="math inline">10</span> 元，他吃不到培根 (⋟﹏⋞) 。</p><h3 id="题解">题解</h3><p>直接比较是否 <span class="math inline"><em>a</em> + <em>b</em> &gt; <em>c</em></span> 就好了 * 是则吃不到 * 否则吃得到</p><h3 id="代码">代码</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line"><span class="type">int</span> a,b,c;</span><br><span class="line">std::cin &gt;&gt; a &gt;&gt; b &gt;&gt; c;</span><br><span class="line">std::cout &lt;&lt; (a+b &gt; c ? <span class="string">&quot;NO\n&quot;</span> : <span class="string">&quot;YES\n&quot;</span>);</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><hr><h2 id="b-放课后故事">B 放课后故事</h2><h3 id="题面-1">题面</h3><p>小S 想要举办一个纸飞机大赛，他最新研制出的纸飞机需要 <span class="math inline"><em>k</em></span> 张纸才能折成。 为了制作纸飞机，他向班里的 <span class="math inline"><em>n</em></span> 个人要了一些纸，第 <span class="math inline"><em>i</em></span> 个人提供了 <span class="math inline"><em>a</em><sub><em>i</em></sub></span> 张纸给 小S 研究纸飞机。 放学了，小S 终于折好了全部的纸飞机，现在有 <span class="math inline"><em>m</em></span> 个人留下来和 小S 一起飞纸飞机。 最多有多少个人能分到纸飞机。</p><h3 id="输入-1">输入</h3><p>第一行输入三个整数 <span class="math inline"><em>n</em>, <em>m</em>, <em>k</em>(1≤<em>n</em>≤10<sup>5</sup>; 0≤<em>m</em>≤10<sup>5</sup>; 1≤<em>k</em>≤10<sup>9</sup>)</span> 代表班级同学数量、留下来的同学数量和叠一只纸飞机需要的纸的数量。  第二行输入 <span class="math inline"><em>n</em></span> 个整数，代表每一个同学提供的纸的数量。</p><h3 id="输出-1">输出</h3><p>在一行上输出一个整数，代表最多有多少个人能分到纸飞机。</p><h3 id="样例1-1">样例1</h3><p><strong>输入</strong> <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">3 2 5</span><br><span class="line">1 2 4</span><br></pre></td></tr></table></figure></p><p><strong>输出</strong> <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">1</span><br></pre></td></tr></table></figure></p><p><strong>说明</strong></p><p>小S 一共收集到 <span class="math inline">7</span> 张纸，只可以叠一架纸飞机。</p><h3 id="样例2-1">样例2</h3><p><strong>输入</strong> <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">6 3 4</span><br><span class="line">1 1 4 5 1 4</span><br></pre></td></tr></table></figure></p><p><strong>输出</strong> <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">4</span><br></pre></td></tr></table></figure></p><p><strong>说明</strong> 小S 一共收集到 <span class="math inline">16</span> 张纸，可以叠 <span class="math inline">4</span> 架纸飞机，每个人都能分到纸飞机。</p><h3 id="题解-1">题解</h3><p><strong>（简短版）</strong>在场的人包括留下来的 <span class="math inline"><em>m</em></span> 人和 小S 自己，所以实际上有 <span class="math inline"><em>m</em> + 1</span> 个人 <strong>（详细版）</strong> 小S 手中的所有纸，实际上就是 <span class="math inline"><em>n</em></span> 人给出的所有纸（也就是第二行的和） 小S 手中的飞机总数，也的确是纸的总数除以 <span class="math inline"><em>k</em></span> 但是，在场的人除了留下来的 <span class="math inline"><em>m</em></span> 人之外还有 小S 自己 所以实际上有 <span class="math inline"><em>m</em> + 1</span> 个人</p><h3 id="代码-1">代码</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> i64 = <span class="type">long</span> <span class="type">long</span>;</span><br><span class="line"></span><br><span class="line"><span class="type">const</span> <span class="type">int</span> N = <span class="number">1e7</span> + <span class="number">10</span>;</span><br><span class="line"><span class="type">int</span> a[N];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">i64 n,m,k;</span><br><span class="line">i64 ans = <span class="number">0</span>;</span><br><span class="line">std::cin &gt;&gt; n &gt;&gt; m &gt;&gt; k;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">0</span> ; i &lt; n ; i ++) &#123;</span><br><span class="line">std::cin &gt;&gt; a[i];</span><br><span class="line">ans += a[i];</span><br><span class="line">&#125;</span><br><span class="line">std::cout &lt;&lt; std::<span class="built_in">min</span>(ans/k,m<span class="number">+1</span>);</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><hr><h2 id="c-异或故事">C 异或故事</h2><h3 id="题面-2">题面</h3><p>给定 <span class="math inline"><em>t</em></span> 组询问，<span class="math inline"><em>76</em></span> 每次询问都会给出一个正整数 <span class="math inline"><em>a</em></span> ，你需要在区间 <span class="math inline">[1, 10<sup>9</sup>]</span> 中找到两个正整数 <span class="math inline"><em>b</em></span> 和 <span class="math inline"><em>c</em></span> ，使得 <span class="math inline"><em>b</em> ⊕ <em>c</em> = <em>a</em></span>。 <span class="math inline">⊕</span> 代表按位异或。</p><h3 id="输入-2">输入</h3><p>每个测试文件均包含多组测试数据。第一行输入一个整数 <span class="math inline"><em>T</em> (1 ≤ <em>T</em> ≤ 10<sup>5</sup>)</span> 代表数据组数，每组测试数据描述如下： 在一行上输入一个整数 <span class="math inline"><em>a</em> ( 1 ≤ <em>a</em> ≤ 10<sup>9</sup> )</span> 代表 <span class="math inline"><em>76</em></span> 给出的初始数字。</p><h3 id="输出-2">输出</h3><p>对于每一组测试数据，在一行上输出两个正整数，代表你找到的两个值。 如果存在多个解决方案，您可以输出任意一个。</p><h3 id="样例1-2">样例1</h3><p><strong>输入</strong> <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">3</span><br><span class="line">1</span><br><span class="line">5</span><br><span class="line">4</span><br></pre></td></tr></table></figure></p><p><strong>输出</strong> <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">2 3</span><br><span class="line">3 6</span><br><span class="line">74 78</span><br></pre></td></tr></table></figure></p><p><strong>说明</strong> 对于第一组测试数据，<span class="math inline">(10)<sub>2</sub>xor (11)<sub>2</sub> = (01)<sub>2</sub></span> 对于第二组测试数据，<span class="math inline">(011)<sub>2</sub>xor (110)<sub>2</sub> = (101)<sub>2</sub></span></p><h3 id="题解-2">题解</h3><p>这题我们主要是利用异或的性质 简单来说就是： <span class="math display">$$\begin{aligned}a \oplus b = c \\a \oplus c = b \\b \oplus c = a\end{aligned}$$</span></p>要证明也很容易 $$<p>$$ 这样应该直观一点啦</p><p>然后，我们可以取一个数作为异或的主要对象，比如本题的上限 <span class="math inline">1<em>e</em>9</span> 但是要注意：异或之后得到的结果可能是 <span class="math inline">0</span> 或者大于 <span class="math inline">1<em>e</em>9</span> 所以要做一个特判：假如存在上述情况，就让异或的数字变成 <span class="math inline">1<em>e</em>9 ≫ 1</span> （其实这一步特判是我guess的，没想到居然过了） （自己测了一下从1到1e9的所有数，确实全都过了）</p><h3 id="代码-2">代码</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="type">int</span> t = <span class="number">1</span>;</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">solve</span><span class="params">()</span> </span>&#123;</span><br><span class="line"><span class="type">int</span> n;</span><br><span class="line">std::cin &gt;&gt; n;</span><br><span class="line"><span class="type">int</span> q = n^((<span class="type">int</span>)<span class="number">1e9</span> &gt;&gt; <span class="number">1</span>);</span><br><span class="line"><span class="keyword">if</span>(q &gt; <span class="number">1e9</span>) &#123;</span><br><span class="line">q = n^(<span class="type">int</span>)(<span class="number">1e9</span>);</span><br><span class="line">std::cout &lt;&lt; q &lt;&lt; <span class="string">&quot; &quot;</span> &lt;&lt; (<span class="type">int</span>)(<span class="number">1e9</span>) &lt;&lt; <span class="string">&quot;\n&quot;</span>;</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">else</span> std::cout &lt;&lt; q &lt;&lt; <span class="string">&quot; &quot;</span> &lt;&lt; ((<span class="type">int</span>)<span class="number">1e9</span> &gt;&gt; <span class="number">1</span>) &lt;&lt; <span class="string">&quot;\n&quot;</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">int</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">std::cin &gt;&gt; t;</span><br><span class="line"><span class="keyword">while</span>(t--)&#123;</span><br><span class="line"><span class="built_in">solve</span>();</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><hr><h2 id="d-构造故事">D 构造故事</h2><h3 id="题面-3">题面</h3><p>小S 今天在数学课上学习了三角形，他回家立马拿出了自己的 <span class="math inline"><em>n</em></span> 根火柴，想知道从这 <span class="math inline"><em>n</em></span> 根火柴中任选 <span class="math inline">3</span> 根，能否组成一个周长最大的三角形。 由于 小S 只会暴力枚举，所以他把这个问题交给了你，你能帮他解决这个问题吗？</p><h3 id="输入-3">输入</h3><p>每个测试文件均包含多组测试数据。第一行输入一个整数 <span class="math inline"><em>T</em>(1≤<em>T</em>≤20)</span> 代表数据组数，每组测试数据描述如下： 第一行输入一个整数 <span class="math inline"><em>n</em>(3≤<em>n</em>≤10<sup>4</sup>)</span> 代表 小S 的火柴数量。 第二行输入 <span class="math inline"><em>n</em></span> 个整数 <span class="math inline"><em>a</em><sub>1</sub>, <em>a</em><sub>2</sub>, …, <em>a</em><sub><em>n</em></sub>(1≤<em>a</em><sub><em>i</em></sub>≤10<sup>9</sup>)</span> 代表每根火柴的长度</p><h3 id="输出-3">输出</h3><p>对于每一组测试数据，在一行上输出一个整数，代表能组成周长最大三角形的周长；如果无论如何都无法组成三角形，直接输出 <code>−1</code> 。</p><h3 id="样例1-3">样例1</h3><p><strong>输入</strong> <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">3</span><br><span class="line">6</span><br><span class="line">2 2 10 4 10 6</span><br><span class="line">5</span><br><span class="line">6 1 5 3 3</span><br><span class="line">5</span><br><span class="line">2 2 4 10 6</span><br></pre></td></tr></table></figure></p><p><strong>输出</strong> <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><span class="line">3</span><br><span class="line">6</span><br><span class="line">2 2 10 4 10 6</span><br><span class="line">5</span><br><span class="line">6 1 5 3 3</span><br><span class="line">5</span><br><span class="line">2 2 4 10 6</span><br></pre></td></tr></table></figure></p><p><strong>说明</strong> 对于第一组测试数据，有两个合法的三角形 <span class="math inline">(4, 10, 10)</span> 和 <span class="math inline">(6, 10, 10)</span> 。</p><h3 id="题解-3">题解</h3><p>这题…..怎么说呢，实际上就是一个小学数学题 根据三角形的性质： &gt; 两边之和大于第三边 两边之差小于第三边</p><p>我们采取一个<strong>贪心</strong>的思路</p><p>把他们排序一下（从小到大） 相邻的两根火柴，假设是第 <span class="math inline"><em>i</em></span> 根和第 <span class="math inline"><em>i</em> + 1</span> 根吧，长度分别为 <span class="math inline"><em>a</em>、<em>b</em>(<em>a</em> ≥ <em>b</em>)</span> 假如他们不能和第 <span class="math inline"><em>i</em> − 1</span> 根火柴（长度为 <span class="math inline"><em>c</em></span>）组成三角形 那么他们一定不能和更前面的火柴组成三角形</p><p>因为假如他们不能组成三角形 那么一定是 <span class="math inline"><em>a</em> − <em>b</em> &gt; <em>c</em></span> 火柴长度比c小的同样不能和前两根火柴组成三角形</p><p>就算把 <span class="math inline"><em>a</em></span> 换成比 <span class="math inline"><em>a</em></span> 更大（也就是更后面的火柴） 那 <span class="math inline"><em>a</em> − <em>b</em> &gt; <em>c</em></span> 同样成立 依然不能组成三角形</p><p>因此，要组成三角形，最优解应当是相邻三根火柴组成的三角形 我们只要从后到前依次遍历即可</p><p><strong>注意</strong>：要记得开long long</p><h3 id="代码-3">代码</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> i64 = <span class="type">long</span> <span class="type">long</span>;</span><br><span class="line"></span><br><span class="line"><span class="type">const</span> <span class="type">int</span> N = <span class="number">1e7</span> + <span class="number">10</span>;</span><br><span class="line"><span class="type">int</span> t = <span class="number">1</span>;</span><br><span class="line">i64 a[N];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">solve</span><span class="params">()</span> </span>&#123;</span><br><span class="line"><span class="type">int</span> n;</span><br><span class="line">std::cin &gt;&gt; n;</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">0</span> ; i &lt; n ; i ++) &#123;</span><br><span class="line">std::cin &gt;&gt; a[i];</span><br><span class="line">&#125;</span><br><span class="line">std::<span class="built_in">sort</span>(a,a+n);</span><br><span class="line"><span class="keyword">for</span>(<span class="type">int</span> i = n<span class="number">-2</span> ; i &gt; <span class="number">0</span> ; i --) &#123;</span><br><span class="line"><span class="keyword">if</span>(a[i<span class="number">+1</span>] - a[i] &lt; a[i<span class="number">-1</span>]) &#123;</span><br><span class="line">std::cout &lt;&lt; a[i] + a[i<span class="number">-1</span>] + a[i<span class="number">+1</span>] &lt;&lt; <span class="string">&quot;\n&quot;</span>;</span><br><span class="line"><span class="keyword">return</span>;</span><br><span class="line">&#125;</span><br><span class="line">&#125;</span><br><span class="line">std::cout &lt;&lt; <span class="number">-1</span> &lt;&lt; <span class="string">&quot;\n&quot;</span>;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">signed</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">std::ios::<span class="built_in">sync_with_stdio</span>(<span class="literal">false</span>);</span><br><span class="line">std::cin.<span class="built_in">tie</span>(<span class="literal">nullptr</span>);</span><br><span class="line"></span><br><span class="line">std::cin &gt;&gt; t;</span><br><span class="line"><span class="keyword">while</span>(t--)&#123;</span><br><span class="line"><span class="built_in">solve</span>();</span><br><span class="line">&#125;</span><br><span class="line"><span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><h2 id="e-约会故事">E 约会故事</h2><h3 id="题面-4">题面</h3><p>情人节才刚刚过去没多久啊 (¯﹃¯∗) ，但是我们的 xqq 已经开始备战明年的情人节了。心灰意冷的他找到 小S 生成了一个虚拟对象 小C ，在一次次的模拟约会中达成“一起进入电影院”的人生成就。 xqq 决定向 小C 发送邀请。在设定中，下述情况的 小C 会残忍的拒绝 xqq 的邀请： * xqq 不在 00:00 后、01:59 前（含）这段 小C 的睡前手机时间里发送邀请； * xqq 如果在 小C 不开心时发送邀请；</p><p>接受了邀请还远远没有成功！在设定中，下述情况的 小C 会在进入电影院前离去： * xqq 到电影院的时间比 小C 晚； * xqq 给 小C 准备的奶茶不是她喜欢的。   如果 小C 同意了邀请，且没有中途离去，我们视为 xqq 达成成就！让我们一起来判定——这一次， xqq 会成功吗。</p><h3 id="输入-4">输入</h3><p>第一行输入两个整数 <span class="math inline"><em>n</em>, <em>m</em>(1≤<em>n</em>,<em>m</em>≤10<sup>5</sup>)</span> 代表 小C 感到开心的时间段数量和 小C 喜欢的奶茶数量。 此后 <span class="math inline"><em>n</em></span> 行，第 <span class="math inline"><em>i</em></span> 行输入两个长度为 <span class="math inline">5</span> ，且形如 <span class="math inline"><em>h</em><em>h</em> : <em>m</em><em>m</em></span> 的字符串代表 小C 第 <span class="math inline"><em>i</em></span> 段感到开心的起止时间，保证每一段开心时间不超过 <span class="math inline">24</span> 小时。除了这 <span class="math inline"><em>n</em></span> 个时间段外，剩余时间她都是不开心的。 第 <span class="math inline"><em>n</em> + 1</span> 行输入 <span class="math inline"><em>m</em></span> 个长度不超过 <span class="math inline">10</span> 且由大小写字母混合构成的字符串 <span class="math inline"><em>s</em><sub>1</sub>, <em>s</em><sub>2</sub>, …, <em>s</em><sub><em>m</em></sub></span> 代表 小C 喜欢喝的奶茶名字。 第 <span class="math inline"><em>n</em> + 2</span> 行输入一个整数 <span class="math inline"><em>q</em>(1≤<em>q</em>≤10<sup>5</sup>)</span> 代表 xqq 尝试次数，每次尝试描述如下： * 第一行输入一个长度为 <span class="math inline">5</span> ，且形如 <span class="math inline"><em>h</em><em>h</em> : <em>m</em><em>m</em></span> 的字符串代表 xqq 发送邀请的时间点； * 第二行输入两个长度为 <span class="math inline">5</span> ，且形如 <span class="math inline"><em>h</em><em>h</em> : <em>m</em><em>m</em></span> 的字符串代表 xqq 到达电影院的时间和 小C 到达电影院的时间，我们约定，他们会在同一天内到达； * 第三行输入一个长度不超过 <span class="math inline">10</span> 且由大小写字母混合构成的字符串 <span class="math inline"><em>t</em></span> 代表 xqq 购买的奶茶名字。</p><p>本题中出现的时间格式均按照 ISO8601 的二十四小时格式标准，即形如 <span class="math inline"><em>h</em><em>h</em> : <em>m</em><em>m</em></span>，其中 <span class="math inline"><em>h</em><em>h</em>(00 ≤ <em>h</em><em>h</em> &lt; 24)</span> 代表小时数，<span class="math inline"><em>m</em><em>m</em>(00 ≤ <em>m</em><em>m</em> &lt; 60)</span> 代表分钟数。</p><h3 id="输出-4">输出</h3><p>对于每一次尝试，如果 xqq 成功达成成就，在一行上输出 <code>Winner xqq</code> ；如果 xqq 成功邀请但是 小C 中途离开，在一行上输出 <code>Joker xqq</code> ；否则，直接输出 <code>Loser xqq</code> 。</p><h3 id="样例1-4">样例1</h3><p><strong>输入</strong> <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br></pre></td><td class="code"><pre><span class="line">3 2</span><br><span class="line">00:03 00:47</span><br><span class="line">00:30 01:23</span><br><span class="line">12:00 17:00</span><br><span class="line">Lemonade Cappuccino</span><br><span class="line">5</span><br><span class="line">00:35</span><br><span class="line">12:00 12:00</span><br><span class="line">Cappuccino</span><br><span class="line">01:23</span><br><span class="line">13:00 12:59</span><br><span class="line">Cappuccino</span><br><span class="line">01:15</span><br><span class="line">11:00 12:43</span><br><span class="line">WaTer</span><br><span class="line">01:24</span><br><span class="line">09:24 11:00</span><br><span class="line">Lemonade</span><br><span class="line">23:59</span><br><span class="line">08:00 07:43</span><br><span class="line">LeMonade</span><br></pre></td></tr></table></figure></p><p><strong>输出</strong> <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">Winner xqq</span><br><span class="line">Joker xqq</span><br><span class="line">Joker xqq</span><br><span class="line">Loser xqq</span><br><span class="line">Loser xqq</span><br></pre></td></tr></table></figure></p><p><strong>说明</strong> * 对于第一次尝试： * xqq 在 <span class="math inline">00 : 35</span> 发送邀请，此时在规定时间内，且 小C 是开心的，所以他的邀请会被接受； * xqq 在 <span class="math inline">12 : 00</span> 到达电影院，此时不晚于 小C ，且携带了 小C 爱喝的 <span class="math inline"><em>C</em><em>a</em><em>p</em><em>p</em><em>u</em><em>c</em><em>c</em><em>i</em><em>n</em><em>o</em></span> ，所以她不会中途离开。 * 对于第二次尝试，由于迟到了，小C 中途离开； * 对于第三次尝试，由于带错了奶茶，小C 中途离开； * 对于第四次尝试，由于发送邀请时 小C 不开心，所以邀请失败； * 对于第五次尝试，由于发送邀请时不在规定时间内，所以邀请失败。</p><h3 id="样例2-2">样例2</h3><p><strong>输入</strong> <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">3 1</span><br><span class="line">00:00 00:00</span><br><span class="line">22:47 23:59</span><br><span class="line">23:58 00:17</span><br><span class="line">AbCdEfGhIj</span><br><span class="line">1</span><br><span class="line">00:00</span><br><span class="line">00:00 00:00</span><br><span class="line">AbCdEfGhIj</span><br></pre></td></tr></table></figure></p><p><strong>输出</strong> <figure class="highlight plaintext"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">Winner xqq</span><br></pre></td></tr></table></figure></p><p><strong>说明</strong> 注意，当开心的起始时间和结束时间相等时，我们认为 小C 一整天都感到开心。</p><h3 id="题解-4">题解</h3><p>这题主要是记录时间的时候容易 TLE ，判断尝试是否成功的时候是可以达到 <span class="math inline"><em>O</em>(1)</span> 的时间复杂度的 由于对于一天的所有分钟总和数量不大，我们可以声明一个二维数组（如<code>int time[12][60]</code>，最好放大一点），讨论里面的某一分钟是否可以邀请 小C。 然后在第一波输入 小C 开心的时段要注意 * 如果开始的时间比结束的时间小，说明这段时间在同一天之内 * 如果开始的时间比结束的时间大，说明这一段时间从这一天跨越到了第二天 * 如果开始时间和结束时间相同，说明整一天 小C 都是快乐的 * 记录的时候在超过 <span class="math inline">01 : 59</span> 的或者在 <span class="math inline">00 : 00</span> 之前的就不要去记录了</p><p>最后比较的时候找到对应的数组元素去判断就好了。</p><h3 id="代码-4">代码</h3><figure class="highlight cpp"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br><span class="line">98</span><br><span class="line">99</span><br><span class="line">100</span><br><span class="line">101</span><br><span class="line">102</span><br><span class="line">103</span><br><span class="line">104</span><br><span class="line">105</span><br><span class="line">106</span><br><span class="line">107</span><br><span class="line">108</span><br><span class="line">109</span><br><span class="line">110</span><br><span class="line">111</span><br><span class="line">112</span><br><span class="line">113</span><br><span class="line">114</span><br><span class="line">115</span><br><span class="line">116</span><br><span class="line">117</span><br><span class="line">118</span><br><span class="line">119</span><br><span class="line">120</span><br><span class="line">121</span><br><span class="line">122</span><br><span class="line">123</span><br><span class="line">124</span><br><span class="line">125</span><br><span class="line">126</span><br><span class="line">127</span><br><span class="line">128</span><br><span class="line">129</span><br><span class="line">130</span><br><span class="line">131</span><br><span class="line">132</span><br><span class="line">133</span><br></pre></td><td class="code"><pre><span class="line"><span class="meta">#<span class="keyword">include</span> <span class="string">&lt;bits/stdc++.h&gt;</span></span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> INF 0x3f3f3f3f</span></span><br><span class="line"><span class="meta">#<span class="keyword">define</span> all(x) x.begin(),x.end()</span></span><br><span class="line"></span><br><span class="line"><span class="keyword">using</span> i64 = <span class="type">long</span> <span class="type">long</span>;</span><br><span class="line"><span class="type">const</span> <span class="type">int</span> N = <span class="number">1e7</span> + <span class="number">10</span>;</span><br><span class="line"><span class="type">int</span> t = <span class="number">1</span>;</span><br><span class="line"><span class="type">int</span> tag[<span class="number">50</span>][<span class="number">70</span>];</span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">void</span> <span class="title">solve</span><span class="params">()</span> </span>&#123;</span><br><span class="line">    <span class="type">int</span> n,m;</span><br><span class="line">    i64 sum = <span class="number">0</span>;</span><br><span class="line">    std::map&lt;std::string,<span class="type">int</span>&gt; mp;</span><br><span class="line">    std::cin &gt;&gt; n &gt;&gt; m;</span><br><span class="line">    std::string s[n*<span class="number">2</span>];</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">0</span> ; i &lt; n*<span class="number">2</span> ; i ++) std::cin &gt;&gt; s[i];</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">0</span> ; i &lt; n*<span class="number">2</span> &amp;&amp; sum &lt;= <span class="number">120</span>; i +=<span class="number">2</span>) &#123;</span><br><span class="line">        <span class="type">int</span> a = (s[i][<span class="number">0</span>] - <span class="string">&#x27;0&#x27;</span>)*<span class="number">10</span> + s[i][<span class="number">1</span>] - <span class="string">&#x27;0&#x27;</span>;</span><br><span class="line">        <span class="type">int</span> b = (s[i][<span class="number">3</span>] - <span class="string">&#x27;0&#x27;</span>)*<span class="number">10</span> + s[i][<span class="number">4</span>] - <span class="string">&#x27;0&#x27;</span>;</span><br><span class="line"></span><br><span class="line">        <span class="type">int</span> a1 = (s[i<span class="number">+1</span>][<span class="number">0</span>] - <span class="string">&#x27;0&#x27;</span>)*<span class="number">10</span> + s[i<span class="number">+1</span>][<span class="number">1</span>] - <span class="string">&#x27;0&#x27;</span>;</span><br><span class="line">        <span class="type">int</span> b1 = (s[i<span class="number">+1</span>][<span class="number">3</span>] - <span class="string">&#x27;0&#x27;</span>)*<span class="number">10</span> + s[i<span class="number">+1</span>][<span class="number">4</span>] - <span class="string">&#x27;0&#x27;</span>;</span><br><span class="line"></span><br><span class="line">        <span class="type">int</span> en1 = (a &lt; a1 || (a == a1 &amp;&amp; b &lt; b1) ? a : <span class="number">0</span>);</span><br><span class="line">        <span class="type">int</span> en2 = (a &lt; a1 || (a == a1 &amp;&amp; b &lt; b1) ? a : <span class="number">0</span>);</span><br><span class="line"></span><br><span class="line">        <span class="keyword">if</span>(a == a1 &amp;&amp; b == b1) &#123;</span><br><span class="line">            a = <span class="number">0</span>,b = <span class="number">0</span>;</span><br><span class="line">            <span class="keyword">while</span>(a &lt;= <span class="number">1</span>) &#123;</span><br><span class="line">                <span class="keyword">if</span>(tag[a][b] == <span class="number">0</span>) sum ++;</span><br><span class="line">                tag[a][b]++;</span><br><span class="line">                b ++;</span><br><span class="line">                <span class="keyword">if</span>(b == <span class="number">60</span>) &#123;</span><br><span class="line">                    b = <span class="number">0</span>;</span><br><span class="line">                    a++;</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line"></span><br><span class="line">            <span class="keyword">break</span>;</span><br><span class="line">        &#125;</span><br><span class="line"></span><br><span class="line">        <span class="type">bool</span> jud = <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">if</span>(a1 &gt; a) jud = <span class="literal">true</span>;</span><br><span class="line">        <span class="keyword">else</span> <span class="keyword">if</span>(a1 == a) &#123;</span><br><span class="line">            <span class="keyword">if</span>(b1 &gt; b) jud = <span class="literal">true</span>;</span><br><span class="line">            <span class="keyword">else</span> jud = <span class="literal">false</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">else</span> jud = <span class="literal">false</span>;</span><br><span class="line"></span><br><span class="line">        <span class="keyword">if</span>(jud) &#123;</span><br><span class="line">            <span class="keyword">while</span>(a &lt;= <span class="number">1</span> &amp;&amp; a &gt;= <span class="number">0</span>) &#123;</span><br><span class="line">                <span class="keyword">if</span>(tag[a][b] == <span class="number">0</span>) sum ++;</span><br><span class="line">                tag[a][b]++;</span><br><span class="line">                b ++;</span><br><span class="line">                <span class="keyword">if</span>(b == <span class="number">60</span>) &#123;</span><br><span class="line">                    b = <span class="number">0</span>;</span><br><span class="line">                    a++;</span><br><span class="line">                &#125;</span><br><span class="line">                <span class="keyword">if</span>(a &gt;= a1 &amp;&amp; b &gt; b1) <span class="keyword">break</span>;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125; <span class="keyword">else</span> &#123;</span><br><span class="line">            <span class="keyword">while</span>(a &lt;= <span class="number">1</span>) &#123;</span><br><span class="line">                <span class="keyword">if</span>(tag[a][b] == <span class="number">0</span>) sum ++;</span><br><span class="line">                tag[a][b]++;</span><br><span class="line">                b ++;</span><br><span class="line">                <span class="keyword">if</span>(b == <span class="number">60</span>) &#123;</span><br><span class="line">                    b = <span class="number">0</span>;</span><br><span class="line">                    a++;</span><br><span class="line">                &#125;</span><br><span class="line">            &#125;</span><br><span class="line"></span><br><span class="line">            a = <span class="number">0</span>,b = <span class="number">0</span>;</span><br><span class="line"></span><br><span class="line">            <span class="keyword">while</span>(a &lt;= <span class="number">1</span>) &#123;</span><br><span class="line">                <span class="keyword">if</span>(tag[a][b] == <span class="number">0</span>) sum ++;</span><br><span class="line">                tag[a][b]++;</span><br><span class="line">                b ++;</span><br><span class="line">                <span class="keyword">if</span>(b == <span class="number">60</span>) &#123;</span><br><span class="line">                    b = <span class="number">0</span>;</span><br><span class="line">                    a++;</span><br><span class="line">                &#125;</span><br><span class="line">                <span class="keyword">if</span>(a &gt;= a1 &amp;&amp; b &gt; b1) <span class="keyword">break</span>;</span><br><span class="line">            &#125;</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">for</span>(<span class="type">int</span> i = <span class="number">0</span> ; i &lt; m ; i ++) &#123;</span><br><span class="line">        std::string s;</span><br><span class="line">        std::cin &gt;&gt; s;</span><br><span class="line">        mp[s]++;</span><br><span class="line">    &#125;</span><br><span class="line"></span><br><span class="line">    i64 p;</span><br><span class="line">    std::cin &gt;&gt; p;</span><br><span class="line">    <span class="keyword">while</span>(p--) &#123;</span><br><span class="line">        std::string s1,s2,q1,q2;</span><br><span class="line">        std::cin &gt;&gt; s1 &gt;&gt; q1 &gt;&gt; q2 &gt;&gt; s2;</span><br><span class="line">        <span class="type">int</span> a = (s1[<span class="number">0</span>] - <span class="string">&#x27;0&#x27;</span>)*<span class="number">10</span> + s1[<span class="number">1</span>] - <span class="string">&#x27;0&#x27;</span>;</span><br><span class="line">        <span class="type">int</span> b = (s1[<span class="number">3</span>] - <span class="string">&#x27;0&#x27;</span>)*<span class="number">10</span> + s1[<span class="number">4</span>] - <span class="string">&#x27;0&#x27;</span>;</span><br><span class="line"></span><br><span class="line">        <span class="type">int</span> a1 = (q1[<span class="number">0</span>] - <span class="string">&#x27;0&#x27;</span>)*<span class="number">10</span> + q1[<span class="number">1</span>] - <span class="string">&#x27;0&#x27;</span>;</span><br><span class="line">        <span class="type">int</span> b1 = (q1[<span class="number">3</span>] - <span class="string">&#x27;0&#x27;</span>)*<span class="number">10</span> + q1[<span class="number">4</span>] - <span class="string">&#x27;0&#x27;</span>;</span><br><span class="line"></span><br><span class="line">        <span class="type">int</span> a2 = (q2[<span class="number">0</span>] - <span class="string">&#x27;0&#x27;</span>)*<span class="number">10</span> + q2[<span class="number">1</span>] - <span class="string">&#x27;0&#x27;</span>;</span><br><span class="line">        <span class="type">int</span> b2 = (q2[<span class="number">3</span>] - <span class="string">&#x27;0&#x27;</span>)*<span class="number">10</span> + q2[<span class="number">4</span>] - <span class="string">&#x27;0&#x27;</span>;</span><br><span class="line"></span><br><span class="line">        <span class="type">bool</span> jud;</span><br><span class="line">        <span class="keyword">if</span>(a1 &gt; a2) jud = <span class="literal">false</span>;</span><br><span class="line">        <span class="keyword">else</span> <span class="keyword">if</span>(a1 == a2) &#123;</span><br><span class="line">            <span class="keyword">if</span>(b1 &lt;= b2) jud = <span class="literal">true</span>;</span><br><span class="line">            <span class="keyword">else</span> jud = <span class="literal">false</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">else</span> jud = <span class="literal">true</span>;</span><br><span class="line"></span><br><span class="line">        <span class="keyword">if</span>(tag[a][b] &gt; <span class="number">0</span> &amp;&amp; mp.<span class="built_in">count</span>(s2) &amp;&amp; jud) &#123;</span><br><span class="line">            std::cout &lt;&lt; <span class="string">&quot;Winner xqq\n&quot;</span>;</span><br><span class="line">        &#125;</span><br><span class="line">        <span class="keyword">else</span>&#123;</span><br><span class="line">            std::cout &lt;&lt; (tag[a][b] &gt; <span class="number">0</span> ? <span class="string">&quot;Joker xqq\n&quot;</span> : <span class="string">&quot;Loser xqq\n&quot;</span>);</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br><span class="line"></span><br><span class="line"></span><br><span class="line"><span class="function"><span class="type">signed</span> <span class="title">main</span><span class="params">()</span></span>&#123;</span><br><span class="line">    std::ios::<span class="built_in">sync_with_stdio</span>(<span class="literal">false</span>);</span><br><span class="line">    std::cin.<span class="built_in">tie</span>(<span class="literal">nullptr</span>);</span><br><span class="line"></span><br><span class="line">    <span class="comment">//std::cin &gt;&gt; t;</span></span><br><span class="line">    <span class="keyword">while</span>(t--)&#123;</span><br><span class="line">        <span class="built_in">solve</span>();</span><br><span class="line">    &#125;</span><br><span class="line">    <span class="keyword">return</span> <span class="number">0</span>;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p><a href="https://ac.nowcoder.com/acm/contest/88392">题目来源</a> 有什么建议或者意见的欢迎在评论区留言！</p>]]></content>
    
    
    <summary type="html">&lt;h1 id=&quot;题解牛客周赛-round-56a-e&quot;&gt;题解：牛客周赛 Round 56（A-E）&lt;/h1&gt;
&lt;h2 id=&quot;a-面包店故事&quot;&gt;A 面包店故事&lt;/h2&gt;
&lt;h3 id=&quot;题面&quot;&gt;题面&lt;/h3&gt;
&lt;p&gt;小镇上有一家面包店，面包以 &lt;span class=&quot;math inline&quot;&gt;&lt;em&gt;x&lt;/em&gt;&lt;/span&gt; 元的价格出售，加 &lt;span class=&quot;math inline&quot;&gt;&lt;em&gt;y&lt;/em&gt;&lt;/span&gt; 元可以多加几块培根。小歪带着 &lt;span class=&quot;math inline&quot;&gt;&lt;em&gt;n&lt;/em&gt;&lt;/span&gt; 元来到了面包店，他想知道自己能不能买到加培根的面包？&lt;/p&gt;
&lt;h3 id=&quot;输入&quot;&gt;输入&lt;/h3&gt;
&lt;p&gt;在一行上输入三个整数 &lt;span class=&quot;math inline&quot;&gt;&lt;em&gt;x&lt;/em&gt;, &lt;em&gt;y&lt;/em&gt;, &lt;em&gt;n&lt;/em&gt;(1≤&lt;em&gt;x&lt;/em&gt;,&lt;em&gt;y&lt;/em&gt;,&lt;em&gt;n&lt;/em&gt;≤100)&lt;/span&gt; 代表面包的价格、培根的价格和小歪带的钱。&lt;/p&gt;
&lt;h3 id=&quot;输出&quot;&gt;输出&lt;/h3&gt;
&lt;p&gt;如果小歪能加到培根，在一行上输出 &lt;code&gt;YES&lt;/code&gt; ；否则，直接输出 &lt;code&gt;NO&lt;/code&gt; 。&lt;/p&gt;
&lt;h3 id=&quot;样例1&quot;&gt;样例1&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;输入&lt;/strong&gt; &lt;figure class=&quot;highlight plaintext&quot;&gt;&lt;table&gt;&lt;tr&gt;&lt;td class=&quot;gutter&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;1&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;td class=&quot;code&quot;&gt;&lt;pre&gt;&lt;span class=&quot;line&quot;&gt;3 1 5&lt;/span&gt;&lt;br&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/figure&gt;&lt;/p&gt;</summary>
    
    
    
    
    <category term="C++" scheme="https://jiejiejiang2004.github.io/tags/C/"/>
    
    <category term="Nowcoder" scheme="https://jiejiejiang2004.github.io/tags/Nowcoder/"/>
    
    <category term="题解" scheme="https://jiejiejiang2004.github.io/tags/%E9%A2%98%E8%A7%A3/"/>
    
  </entry>
  
</feed>
