python100道经典例题——第十三天

python入门题
每天五题练习
本文章记录了python经典编程题目,初学者必须要学会哦

实例 061:

题目:有两个磁盘文件A和B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列), 输出到一个新文件C中。

fp = open('test1.txt')             
                 
a = fp.read()

fp.close()
 
fp = open('test2.txt')
 
b = fp.read()
 
fp.close()
 
fp = open('test3.txt', 'w')
 
l = list(a + b)
 
l.sort()
 
s = ''
 
s = s.join(l)
 
fp.write(s)
 
fp.close()
实例 062:

题目:编写一个程序,计算0—7所能组成的奇数个数。

sum = 4
s = 4
for j in range(2,9):
    print(sum)
    if j <= 2:
        s *= 7
    else:
        s *= 8
    sum += s
print('sum = %d' % sum)
实例 063:

题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

nmax = 50
n = int(input('请输入总人数:'))
num = []
for i in range(n):
    num.append(i + 1)
i = 0
k = 0
m = 0
while m < n - 1:
    if num[i] != 0 : k += 1
    if k == 3:
        num[i] = 0
        k = 0
        m += 1
    i += 1
    if i == n : i = 0
i = 0
while num[i] == 0: i += 1
print(num[i])
实例 064:

题目:编写一个程序,用于对一个数进行分解质因子。

n=int(input('请输入一个n:'))  
result=[]  
i=2  
str1=str(n)+'='  
while n>1:  
   if n%i==0:  
       n/=i  
       result.append(str(i))  
       i -= 1  
   i +=1  
str1+='*'.join(result)  
print(str1)
实例 065:

题目:古代有一个梵塔,塔内有A、B、C三个基座,A座上有64个盘子,盘子大小不等,大的在下,小的在上。有人想把这64个盘子从A座移到C座,但每次只允许移动一个盘子,并且在移动的过程中,3个基座上的盘子始终保持大盘在下,小盘在上。在移动过程中盘子可以放在任何一个基座上,不允许放在别处。编写程序,用户输入盘子的个数,显示移动的过程。

解题思路:假定盘子从大到小依次编号为:盘1、盘2、
如果只有一个盘子,则不需要利用B座,直接将盘子从A移动到C
如果有2个盘子,可以先将盘2移动到B,将盘1移动到C后,再将盘2移动到C
如果有3 个盘子,那么根据2个盘子的结论,可以借助C将盘2和盘3从A移动到B,将盘1从A移动到C,A变成空座;借助A座,将B上的两个盘子移动到C
上述思路可以一直扩展下去,根据以上的分析,可以写出下面的递归表达: 将一个盘子从A移动到C
借助C将n-1个盘子从A移动到B
将一个盘子从A移动到C n>1
借助A将n-1个盘子从B移动到C
借助B将n个盘子从A移动到C

为了编写一个递归函数实现“借助B将n个盘子从A移到C”,比较等式左右两边相似操作,会发现:
盘子的数量从n变化到n-1,问题规模缩小了,显然n是一个可变的参数
盘子的起始位置是变化的,等式左侧是A,右侧是A或B
盘子的最终位置是变化的,等式左侧是C、右侧是B或C
同样被借助的位置也是变化的
因此,递归函数共有盘子数、起始位置、借助位置和最终位置4个变量,因此函数有4个可变参数。假定函数的参数一次为盘子数、初始位置、借助位置和最终位置,则可写出下面函数。

def Hanoi(n,ch1,ch2,ch3):
    if n==1:
        print(ch1,'->',ch3)
    else:
        Hanoi(n-1,ch1,ch3,ch2)
        print(ch1,'->',ch3)
        Hanoi(n-1,ch2,ch1,ch3)
N=int(input("请输入盘子的数量:"))
Hanoi(N,'A','B','C')

今天的任务完成啦~
明天继续加油~冲冲冲!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

准时准点睡觉

如果觉得不错可以点点这里哦

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值