题目 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))