python基本算法题(一)
<h3>1、3位水仙花数计算</h3><p>"3位水仙花数”是指一个三位整数,其各位数字的3次方和等于该数本身。</p>
<p>例如:</p>
<p>ABC是一个“3位水仙花数”,则:A的3次方+B的3次方+C的3次方 = ABC。</p>
<p>使用Python,输出所有的3位水仙花数。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">>>> for</span> i <span style="color: rgba(0, 0, 255, 1)">in</span> range(100,1000<span style="color: rgba(0, 0, 0, 1)">):
</span><span style="color: rgba(0, 0, 255, 1)">if</span> pow(i // 100 , 3) + pow(i % 10 , 3) + pow(i // 10 % 10, 3) ==<span style="color: rgba(0, 0, 0, 1)"> i:
</span><span style="color: rgba(0, 0, 255, 1)">print</span>(i,end=<span style="color: rgba(128, 0, 0, 1)">"</span> <span style="color: rgba(128, 0, 0, 1)">"</span>) </pre>
<p> >>> 153 370 371 407 <br> Process finished with exit code 0</p>
</div>
<p>水仙花数是指一个 3 位数,它的每个位上的数字的 3次幂之和等于它本身(例如:1^3 + 5^3+ 3^3 = 153)。与水仙花数类似</p>
<p>同样的,与水仙花数相似,回文数的判断方法也是采取相应的方式</p>
<h3>2、回文数的判断</h3>
<p>“回文”是指正读反读都能读通的句子。在数学中也有这样一类数字有这样的特征,称为回文数,例如121,25852等等</p>
<div class="cnblogs_code">
<pre>n=input(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">请输入一个数字:</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">if</span> n == n[::-1<span style="color: rgba(0, 0, 0, 1)">]:
</span><span style="color: rgba(0, 0, 255, 1)">print</span>(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">你输入的数字是回文数</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 0, 255, 1)">print</span>(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">你输入的数字不是回文数</span><span style="color: rgba(128, 0, 0, 1)">"</span>)</pre>
</div>
<p>这里是根据回文数的特性:回文数和本身颠倒的数相等,来进行判断的</p>
<h3>3、使用Python判断是否为闰年</h3>
<p>判断任意年份是否为闰年,需要满足以下条件中的任意一个:<br> ① 该年份能被 4 整除同时不能被 100 整除;<br> ② 该年份能被400整除。</p>
<p>由于满足闰年的条件互相有关联,所以可以使用条件语句来实现,判断输入的年份是否为闰年</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> leap(a):
</span><span style="color: rgba(0, 0, 255, 1)">if</span> a % 4 ==<span style="color: rgba(0, 0, 0, 1)"> 0:
</span><span style="color: rgba(0, 0, 255, 1)">if</span> a % 400 ==<span style="color: rgba(0, 0, 0, 1)"> 0:
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> True
</span><span style="color: rgba(0, 0, 255, 1)">elif</span> a % 100 ==<span style="color: rgba(0, 0, 0, 1)"> 0:
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> False
</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> True
</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> False
n </span>=<span style="color: rgba(0, 0, 0, 1)"> int(input())
</span><span style="color: rgba(0, 0, 255, 1)">if</span> leap(n) ==<span style="color: rgba(0, 0, 0, 1)"> True:
</span><span style="color: rgba(0, 0, 255, 1)">print</span>(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">{}年是闰年</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">.format(n))
</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 0, 255, 1)">print</span>(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">{}年不是闰年</span><span style="color: rgba(128, 0, 0, 1)">"</span>.format(n))</pre>
</div>
<h3>4、快乐的数字</h3>
<p>首先是一个快乐的数字的定义:</p>
<p>快乐的数字按照如下方式确定:从一个正整数开始,用其每位数的平方之和取代该数,并重复这个过程,直到最后数字要么收敛等于1且一直等于1,要么将无休止地循环下去且最终不会收敛等于1。能够最终收敛等于1的数就是快乐的数字。使用Python编写一个算法来确定一个数字是否“快乐”</p>
<p>例如数字 19 就是一个快乐的数字,计算过程如下:<span class="water-mark is-text-white"></span></p>
<p> 1<sup>2</sup> + 9<sup>2</sup> = 82</p>
<p> 8<sup>2</sup> + 2<sup>2</sup> = 68</p>
<p> 6<sup>2</sup> + 8<sup>2</sup> = 100</p>
<p> 1<sup>2</sup> + 0<sup>2</sup> + 0<sup>2</sup> = 1 (最终收敛为1)</p>
<p>这里经过了分析,得出了,当循环到数字4时,那么这个数字一定不是快乐数,所以可以得出条件。设置一个循环,当循环到1(快乐数)或者4(不是快乐数)时,就终止循环,得出结果是否为快乐数</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">def</span> getSumofSquares(num): <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">快乐数判断</span>
numStr=<span style="color: rgba(0, 0, 0, 1)">str(num)
sum</span>=<span style="color: rgba(0, 0, 0, 1)">0
</span><span style="color: rgba(0, 0, 255, 1)">for</span> i <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> numStr:
sum </span>+= int(i)**2
<span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> sum
n </span>=<span style="color: rgba(0, 0, 0, 1)"> input()
sumofSqrs </span>=<span style="color: rgba(0, 0, 0, 1)"> eval(n)
</span><span style="color: rgba(0, 0, 255, 1)">while</span> sumofSqrs != 1 <span style="color: rgba(0, 0, 255, 1)">and</span> sumofSqrs != 4<span style="color: rgba(0, 0, 0, 1)">:
sumofSqrs </span>=<span style="color: rgba(0, 0, 0, 1)"> getSumofSquares(sumofSqrs)
</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 0, 255, 1)">if</span> sumofSqrs == 1<span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 0, 255, 1)">print</span>(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">True</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 0, 255, 1)">print</span>(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">False</span><span style="color: rgba(128, 0, 0, 1)">"</span>)</pre>
</div>
<h3>5、括号配对检测</h3>
<p>用户输入一行字符串,其中可能包括小括号 (),请检查小括号是否配对正确(本题仅限于小括号)</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> match_parentheses(s):
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 把一个list当做栈使用</span>
ls =<span style="color: rgba(0, 0, 0, 1)"> []
parentheses </span>= <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">()</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(0, 0, 255, 1)">for</span> i <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> range(len(s)):
si </span>=<span style="color: rgba(0, 0, 0, 1)"> s
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 如果不是括号则继续</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> parentheses.find(si) == -1<span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 0, 255, 1)">continue</span>
<span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 左括号入栈</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> si == <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">(</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">:
ls.append(si)
</span><span style="color: rgba(0, 0, 255, 1)">continue</span>
<span style="color: rgba(0, 0, 255, 1)">if</span> len(ls) ==<span style="color: rgba(0, 0, 0, 1)"> 0:
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> False
</span><span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)"> 出栈比较是否匹配</span>
p =<span style="color: rgba(0, 0, 0, 1)"> ls.pop()
</span><span style="color: rgba(0, 0, 255, 1)">if</span> p == <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">(</span><span style="color: rgba(128, 0, 0, 1)">'</span> <span style="color: rgba(0, 0, 255, 1)">and</span> si == <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">)</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 0, 255, 1)">continue</span>
<span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> False
</span><span style="color: rgba(0, 0, 255, 1)">if</span> len(ls) ><span style="color: rgba(0, 0, 0, 1)"> 0:
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> False
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> True
n</span>=<span style="color: rgba(0, 0, 0, 1)">input()
result </span>=<span style="color: rgba(0, 0, 0, 1)"> match_parentheses(n)
</span><span style="color: rgba(0, 0, 255, 1)">if</span> result==<span style="color: rgba(0, 0, 0, 1)">True:
</span><span style="color: rgba(0, 0, 255, 1)">print</span>(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">配对成功</span><span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 0, 255, 1)">print</span>(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">配对不成功</span><span style="color: rgba(128, 0, 0, 1)">"</span>)</pre>
</div>
<p>这里是使用list来代替栈的作用,来完成括号匹配的功能</p>
<p>括号匹配问题(所有的括号)算法:</p>
<p>首先设置两个列表分别存放的是各种括号的开括号和闭括号,然后遍历给定的字符串,分如下几种情况:</p>
<p> 1.字符串 首字符 出现在闭括号列表中,直接结束,输出错误<br> 2.字符串长度不为偶数,直接结束,输出错误<br> 3.对原始字符串列表化去重,如果去重后的列表长度不为偶数直接结束,输出错误<br> 4.遍历字符串,将属于开括号集合的括号加入到列表中,当遇上一个闭括号的时候计算该闭括号在闭括号列表中的索引与</p>
<p>当前列表最后一个开括号在开括号列表中的索引是否一致,一致则继续,否则直接结束,输出错误</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">def</span><span style="color: rgba(0, 0, 0, 1)"> bracket_mathch(one_str):
tmp_list </span>=<span style="color: rgba(0, 0, 0, 1)"> []
open_bracket_list </span>= [<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">(</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">[</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">{</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)"><</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">《</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">]
close_bracket_list </span>= [<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">)</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">]</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">}</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">></span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">》</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">]
one_str_list </span>=<span style="color: rgba(0, 0, 0, 1)"> list(one_str)
length </span>=<span style="color: rgba(0, 0, 0, 1)"> len(one_str_list)
set_list </span>=<span style="color: rgba(0, 0, 0, 1)"> list(set(one_str_list))
num_list </span>=
</span><span style="color: rgba(0, 0, 255, 1)">if</span> one_str <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> close_bracket_list:
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> False
</span><span style="color: rgba(0, 0, 255, 1)">elif</span> length % 2 !=<span style="color: rgba(0, 0, 0, 1)"> 0:
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> False
</span><span style="color: rgba(0, 0, 255, 1)">elif</span> len(set_list) % 2 !=<span style="color: rgba(0, 0, 0, 1)"> 0:
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> False
</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 0, 255, 1)">for</span> i <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> range(length):
</span><span style="color: rgba(0, 0, 255, 1)">if</span> one_str <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> open_bracket_list:
tmp_list.append(one_str)
</span><span style="color: rgba(0, 0, 255, 1)">elif</span> one_str <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> close_bracket_list:
</span><span style="color: rgba(0, 0, 255, 1)">if</span> close_bracket_list.index(one_str) == open_bracket_list.index(tmp_list[-1<span style="color: rgba(0, 0, 0, 1)">]):
tmp_list.pop()
</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> False
</span><span style="color: rgba(0, 0, 255, 1)">break</span>
<span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> True
one_str_list </span>= [<span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">({}</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">({[<>]})</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">[(){}</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">{{{{{</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">([{})</span><span style="color: rgba(128, 0, 0, 1)">'</span>, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">}{[)]</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">]
</span><span style="color: rgba(0, 0, 255, 1)">for</span> one_str <span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> one_str_list:
</span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> bracket_mathch(one_str):
</span><span style="color: rgba(0, 0, 255, 1)">print</span>(one_str, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">括号匹配正确</span><span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(0, 0, 0, 1)">)
</span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)">:
</span><span style="color: rgba(0, 0, 255, 1)">print</span>(one_str, <span style="color: rgba(128, 0, 0, 1)">'</span><span style="color: rgba(128, 0, 0, 1)">括号匹配错误</span><span style="color: rgba(128, 0, 0, 1)">'</span>)</pre>
</div>
<p>注:这里仅支持输入纯括号,并对其进行括号匹配判断,没有实现括号+字符串的括号匹配</p>
<h3>6、天天向上的力量</h3>
<p> 一年365天,以第一天的能力为基数,记为1.0,当好好学习时能力值相比前一天提高1‰,当没有学习时能力值相比前一天下降1‰。</p>
<p>每天努力和每天放任,一年下来的能力值相差多少呢?</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">import</span><span style="color: rgba(0, 0, 0, 1)"> math
dayup </span>= math.pow((1.0+0.001),365) <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">每天提高</span>
daydown = math.pow((1.0-0.001),365) <span style="color: rgba(0, 128, 0, 1)">#</span><span style="color: rgba(0, 128, 0, 1)">每天下降</span>
<span style="color: rgba(0, 0, 255, 1)">print</span>(<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">每天提高:{:.2f},每天懈怠:{:.2f}</span><span style="color: rgba(128, 0, 0, 1)">"</span>.format(dayup,daydown))<br>>>> 每天提高:1.44,每天懈怠:0.69</pre>
</div>
<p>这是很基础的一个调用math库函数的题,然后使用格式化输出。</p>
<p>可以看出,经过1年的时间,每天提高一点点竟然达到了 1.69 !!这说明天天向上的力量不可小觑。所以从每天做起,每天改变一点点,日积月累,就会获得巨大的改变。</p><br><br>
来源:https://www.cnblogs.com/Y-xp/p/11699439.html
頁:
[1]