python蓝桥杯2——IP判断、Tom数、K-进制数

本文介绍了两个编程题目,分别是IP地址的合法性判断和特定进制数的处理。对于IP地址判断,程序需检查每个部分是否在0-255范围内且无前导零;在Tom数问题中,计算输入数的各位数字之和;在K-进制数问题中,通过递推计算有效K进制数的数量。这些问题涉及到字符串处理、数值范围验证和进制转换的算法设计。
摘要由CSDN通过智能技术生成

题目 1116: IP判断

题目描述

在基于Internet的程序中,我们常常需要判断一个IP字符串的合法性。
合法的IP是这样的形式:
A.B.C.D
其中A、B、C、D均为位于[0, 255]中的整数。为了简单起见,我们规定这四个整数中不允许有前导零存在,如001这种情况。
现在,请你来完成这个判断程序吧

输入

输入由多行组成,每行是一个字符串,输入由“End of file”结束。
字符串长度最大为30,且不含空格和不可见字符

输出

对于每一个输入,单独输出一行
如果该字符串是合法的IP,输出Y,否则,输出N

样例输入

1.2.3.4
a.b.c.d
267.43.64.12
12.34.56.bb
210.43.64.129
-123.4.5.6

样例输出

Y
N
N
N
Y
N

代码演示


a = input()

while a != "End of file":
    
    units = a.split('.')
    count = 0
    for j in range(len(units)):
        
        if units[j].isdigit():
            unit = int(units[j])
            if (unit >= 0) and (unit <= 255):
                count += 1
        if count == 4:
            print("Y")
    if count != 4:
        print("N")
    a = input()

题目 1118: Tom数

题目描述

正整数的各位数字之和被Tom称为Tom数。求输入数(<2^32)的Tom数!

输入

每行一个整数(<2^32).

输出

每行一个整数(<2^32).

样例输入

12345
56123
82

样例输出

15
17
10

代码演示

a = input()
while True:
    
    print(sum(list(map(int, a))))
    a = input()

题目 1117: K-进制数

题目描述

考虑包含N位数字的K-进制数. 定义一个数有效, 如果其K-进制表示不包含两连续的0.

考虑包含N位数字的K-进制数. 定义一个数有效, 如果其K-进制表示不包含两连续的0.

例:
1010230 是有效的7位数
1000198 无效
0001235 不是7位数, 而是4位数.

给定两个数N和K, 要求计算包含N位数字的有效K-进制数的总数.

假设 2 < = K < = 10 ; 2 < = N ; 4 < = N + K < = 18 2 <= K <= 10; 2 <= N; 4 <= N+K <= 18 2<=K<=10;2<=N;4<=N+K<=18.

输入

两个十进制整数N和K

输出

十进制表示的结果

样例输入

2
10

样例输出

90

代码演示



"""
解题思路:

        这个题应该是一个递推题。可以用f[i]表示i位(最高位是第i位)K进制数的总数,那么就应该有:f[i]=(f[i-1]+f[i-2])*(k-1)。

解释一下:f[i]也就是i位K进制数的总数应该等于:第i-1位为0与第i-1位不为0的情况的和乘以第i位的情况数(1..k-1)

(1)第i-1位为0的情况应该等于i-2位不为0的情况总数,即f[i-2]

(2)第i-1位不为0的情况应该等于f[i-1]

所以f[i]=(f[i-1]+f[i-2])*(k-1)
"""
    
n=int(input())
k=int(input())
def func(k,n):
    if n==1:
        return k-1
    if n==2:
        return (k-1)*k
    return (k-1)*func(k,n-1)+(k-1)*func(k,n-2)
print(func(k,n))

            

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值