字符识别?
题目描述
你的任务是写一个程序进行字符识别。别担心,你只需要识别1, 2, 3,如下:
.*. *** ***
.*. ..* ..*
.*. *** ***
.*. *.. ..*
.*. *** ***
输入
输出
输出应包含一行,即识别出的各个字符。
样例输入 Copy
<span style="background-color:#ffffff"><span style="color:#333333"><span style="color:#333333"><span style="background-color:#f5f5f5">3
.*..***.***.
.*....*...*.
.*..***.***.
.*..*.....*.
.*..***.***.</span></span></span></span>
样例输出 Copy
<span style="background-color:#ffffff"><span style="color:#333333"><span style="color:#333333"><span style="background-color:#f5f5f5">123</span></span></span></span>
def find(array, i):
j = 0
while j < i * 4:
if array[0][j] == '.':
print(1, end='')
elif array[3][j] == '*':
print(2, end='')
elif array[3][j+2] == '*':
print(3, end='')
j = j + 4
num = int(input())
array = [input() for _ in range(5)]
find(array, num)
print()
数的划分
题目描述
使用递归编写一个程序,求一个正整数n的所有划分个数。
例如,输入3,输出3;输入4,输出5。
输入
多组输入,每一组是一个正整数n。
输出
输出划分数。
样例输入 Copy
3 4
样例输出 Copy
3 5
def func(n, m):
if n == 1 or m == 1:
return 1
if n == m:
return func(n, n - 1) + 1
if n < m:
return func(n, n)
if n > m:
return func(n, m - 1) + func(n - m, m)
while 1:
num = int(input())
sum = func(num, num)
print(sum)
外观数列
题目描述
给定一个正整数 n ,请设计一个递归算法输出外观数列的第 n 项,「外观数列」是一个整数序列,从数字 1 开始,序列中的每一项都是对前一项的描述。
前五项如下:
1. 1
2. 11
3. 21
4. 1211
5. 111221
第一项是数字 1
描述前一项,这个数是 1 即 “ 一 个 1 ”,记作 "11"
描述前一项,这个数是 11 即 “ 二 个 1 ” ,记作 "21"
描述前一项,这个数是 21 即 “ 一 个 2 + 一 个 1 ” ,记作 "1211"
描述前一项,这个数是 1211 即 “ 一 个 1 + 一 个 2 + 二 个 1 ” ,记作 "111221"
输入
多组输入,每组输入一个非负整数(n<=30)
输出
输出结果,每个结果占一行
样例输入 Copy
1 2 3
样例输出 Copy
1 11 21
class Solution:
def countAndSay(self, n: int) -> str:
if n == 1:
return '1'
return self.describe(self.countAndSay(n - 1))
def describe(self, input_str): # 定义描述函数
i = 0
description = '' # 初始化输出描述
while i < len(input_str):
count = 0 # 每个字符的计数器
j = i # 从第i位开始进行比较
while j < len(input_str) and input_str[j] == input_str[i]: # 首先保证j在字符索引范围内,再进行比较
count += 1 # 计数器+1
j += 1 # 比较位+1
description = description + str(count) + input_str[i] # 将每次统计的描述字符组合起来
i = j # 从新字符开始进行下一次的比较
return description # 返回描述字符,即countAndSay(n+1)
mod = Solution()
while 1:
print(mod.countAndSay(int(input())))
线性搜索
题目描述
请编写一个程序,输入包含n(n<=10000)个整数的数列S以及包含q个(q<=500)不重复整数的数列T,输出既包含于T也包含于S的整数的个数C。S、T中的元素均大于0且小于109,T的元素不重复。
输入
多组输入。
每一组输入的第一行输入n,第二行输入代表S的n个整数,第三行输入q,第四行输入代表T的q个整数。
输出
用1行输出C。
样例输入 Copy
5 1 2 3 4 5 3 3 4 1
样例输出 Copy
3
while 1:
n = int(input())
s = input()
S = s.split(' ')
q = int(input())
t = input()
T = t.split(' ')
count = 0
for i in range(n):
for j in range(q):
if S[i] == T[j]:
count += 1
j += 1
i += 1
print(count)
二分搜索(递归)
题目描述
使用递归算法,实现二分搜索。
输入
多组数据输入,每组第一个数字为数组的长度n,然后输入n个整数,最后输入待查询的值。
输出
输出待查询值所在的位置,如果没有找到,则返回-1。
样例输入 Copy
3 1 2 3 2 4 0 1 3 4 2
样例输出 Copy
2 -1
while True:
# 创建一个列表,使用 split() 函数进行分割
# map() 函数根据提供的函数对指定序列做映射,就是转化为int型
lst = list(map(int, input().split()))
b = lst[-1]
# del 代表删除变量
del lst[0]
del lst[-1]
if b in lst:
for i in range(len(lst)):
if lst[i] == b:
print(i + 1)
else:
print(-1)
二分搜索(非递归)
题目描述
使用非递归算法,实现二分搜索。
输入
多组数据输入,每组第一个数字为数组的长度n,然后输入n个整数,最后输入待查询的值。
输出
输出待查询值所在的位置,如果没有找到,则返回-1。
样例输入 Copy
3 1 2 3 2 4 0 1 3 4 2
样例输出 Copy
2 -1
while True:
# 创建一个列表,使用 split() 函数进行分割
# map() 函数根据提供的函数对指定序列做映射,就是转化为int型
lst = list(map(int, input().split()))
b = lst[-1]
# del 代表删除变量
del lst[0]
del lst[-1]
if b in lst:
for i in range(len(lst)):
if lst[i] == b:
print(i + 1)
else:
print(-1)