这篇博客是收集整理了一些以前平时的练手题目以及比较有意思的题目,锻炼思维逻辑和编程的能力的题,并附上个人的思路代码,多种解法。若大家有不同的见解,可以留言一起交流,后续也会继续发布新的内容。
例1、水仙花数
题目:打印出所有"水仙花数","水仙花数"是指一个三位数,其各位数字立方和等于该本身。
例如:153是一个水仙花数,因为153=13+53+33
题解:该题训练的是循环和数字的拆分,循环所有的三位数,将其拆分为三个数字,再实现三次方和与本身是否相等的判断。循环很简单,只要了解了边界就好。数字分割有两种方法:基本方法和函数库法
基本方法:
#取余数
print(123%10)
#去中间数字
# int是剪去小数部分,只保留前面的整数
print(int((126%100)/10))
print(int((123%100)/10))#通过这两个数字我们验证了int的取整规则
# 取第一位
print(int(123/100))
当然基本的方法只适用于比较短的数字,当数字很大的时候就不是很方便。
函数库
map ()函数的作用就是,依次从这个列表中取出每一个元素,然后放到f (x)函数中,最终得到一个通过函数映射后的结果。
下面的方法是我以前的代码中做出来的,首先将数字转化为字符再进行挨个取整,最后添加进列表内。实现了数字的切割。
a=list(map(int,str(123)))
print(a)
通过下图对比,我们发现两种方法的不同一目了然,理解第二个方法的原理,会减少代码量。
代码:
for i in range(100,1000):
a = list(map(int, str(i)))
# print(a)
if i == a[0]**3+a[1]**3+a[2]**3:
print(i)
例2、鸡兔同笼问题
假设共有鸡、兔 30 只,脚 90 只,求鸡、兔各有多少只。
设计两层循环鸡和兔的数量,我们范围是(0~脚的总数量/一只鸡或兔的腿的数量),最里面判断教的数量书否等于总数。
for x in range(0,45):
for y in range(0,23):
if x + y==30 and 2*x+4*y==90 :
print(x,y)
break
例3、百钱买百鸡
假设公鸡 5 元一只,母鸡 3 元一只,小鸡 1 元三只,现在有 100 块钱,想买 100 只鸡,问有多少种买法?
设计三层循环,加判断等式成立时的结果。
for x in range(0,21):
for y in range(0,34):
for z in range(0,34):
if x*5+y*3+z==100 and x+y+z*3==100:
print(x,y,z)
例4、最大公约数和最小公倍数
编写函数,接收两个正整数作为参数,返回一个数组,其中第一个元素为最大公约数,第二个元素为最小公倍数。
import math
x=int(input("请输入第一个整数:"))
y=int(input("请输入第二个整数:"))
a=[]
b=[]
for m in range(2,x+1):
for n in range(2,y+1):
if x%m==0 and y%n==0 and m==n :
a.append(m)
b.append(max(a))
b.append(int((x*y)/b[0]))
print(b)
例5、不重复四位数
a=[1,2,3,4]
c=0
for x in a:
for y in a:
if x!=y:
for z in a:
if x!=z and y!=z:
c+=1
print(x*100+y*10+z)
print(c)