前言
自学python差不多两个星期了,找点题目练练手顺便记录一下,希望大佬们多多指点
题目
1 判断一个整形数是否为回文数
回文数定义即为数字翻转后仍为原来的数字
因为在学校学过c++,所以这类题型还是比较简单的。循环取余就可以做到最基本的回文数判断,这里就不过多赘述了
num = int(input("输入一个十进制整数:"))
s = 0
n = num
while num > 0 :
s = s * 10 + num % 10
num = num // 10
if(s==n):
print("YES")
else:
print("NO")
回文数这类题感觉还挺常见,这里给出的是最基本的
2 被三整除
题目描述
输入包括两个整数l和r(1 <= l <= r <= 1e9), 表示要求解的区间两端。
输出要求
输出一个整数, 表示区间内能被3整除的数字个数。
众所周知能被3整除的数,各位数字相加能被3整除根据这个原理可以进行判断
def fate(n): # 编写函数
a=0
while n > 0 : #获取各位数字之和
a=n%10+a
n=(n-a)//10
return (a)
num_first = int(input("输入一个数字:"))
num_end = int(input("请输入最后一个数字:"))
for i in range (num_first,num_end): # 循环
if(fate(i)%3==0):
print(i)
3.骨牌推到
输入描述
输入为一个长度不超过1000的,仅包含‘L’,‘R’,‘.’的字符串
输出描述
根据输入,输出一个仅由‘L’,‘R’,‘.’组成的结果字符串
示例
输入
.L.R...LR....L.
输出
LL.RR.LLRRRLLL.
这一题想了好长时间,尝试了许多方法,一开始我的思路过于麻烦,写了一堆函数去判断每一个L,R的位置,后来查阅了一些资料,反应过来,可以利用两次循环遍历,第一遍将R右边的.全部转换为R,并构造一个列表储存每一次R出现的次数。第二遍循环从最后一位开始,通过中间量temp来判断是向左还是向右倾倒。顺带一提我这里用的是PyCharm
bone=list(input("请输入仅包涵‘L’,‘R’,‘.’的字符:"))
power=[]# 储存
temp=0# 用于判断的量
power=[0 for i in range(0,len(bone))]
# 第一次遍历
for i in range (0,len(bone)):
if(bone[i-1]=='R' and bone[i]=='.'):#R右方相邻的.转换成R
bone[i]='R'
power[i]=power[i-1]+1# 记录R的次数
print(bone)# 为方便观看我在这里输出一下
print(power)
# 第二次遍历
for i in range (len(bone)-2,0,-1):
if(bone[i+1]!='L'):
continue
temp=power[i+1]+1# 循环一次给temp赋值一次
if(bone[i]=='.' or temp < power[i]):# 如果此时temp小于power[i]则为L
bone[i]='L'
elif(bone[i]=='R' and temp == power[i]):# 如果此时temp恰好与power[i]相等则为.
bone[i]='.'
print(bone)
这一题应该是这里面最难的了。
结语
本人刚开始学习Python或许有各种各样的低级错误,望各位大佬海涵并指出问题,如果有好的解题思路或者疑问欢迎在评论区提出,感谢。