HJ42 学英语
题目链接:学英语_牛客题霸_牛客网 (nowcoder.com)
思路:学习了牛客的题解。由于每三个数字时一组,可以先设置三位数字(即小于1000)的读法,然后分成百万组,千组,个组,根据数字的长度来分配每一组前面的数字。
如:num = 1234567-->1,234,567
百万组:1,234,567 mod 1,000,000 = 1 --> 1百万
千组:(1,234,567 // 1,000)mod 1000 = 234 --> 234千
个组:1234567 mod 1000 --> 567
代码
import sys
num = int(sys.stdin.readline().strip())
num1 = ['zero','one','two','three','four','five','six',
'seven','eight','nine','ten','eleven','twelve',
'thirteen','fourteen','fifteen','sixteen',
'seventeen','eighteen','nineteen']
num2 = [0,0,'twenty','thirty','forty','fifty','sixty',
'seventy','eighty','ninety']
def n2w(n):
if n > 0:
if n < 20:
word.append(num1[n])
else:
word.append(num2[n//10])
if n%10 != 0:
word.append(num1[n%10])
def hun(n):
if n >= 100:
word.append(num1[n//100])
word.append('hundred')
if n % 100 != 0:
word.append('and')
n2w(n%100)
word = []
a = num % 1000 # 百十个位
b = (num//1000) % 1000 # 万千位
c = num//1000000 # 百万位
if c > 0 :
hun(c)
word.append('million')
if b > 0:
hun(b)
word.append('thousand')
if a > 0 :
hun(a)
print(' '.join(word))
HJ 44 Sudoku
题目链接:Sudoku_牛客题霸_牛客网 (nowcoder.com)
思路:巩固了之前学过的回溯的知识。
通过两个嵌套的循环,遍历数独矩阵的 每个位置。当遇到一个空格('0')时,它尝试填入1到9的数字,检查是否满足数独规则(在行、列、和小九宫格中没有重复的数字)。如果满足规则,它就递归调用自身,尝试填充下一个空格。如果成功找到一个合法的填充,整个递归栈会一直返回True,直到填满整个数独。
如果在某个位置尝试了1到9的所有数字都不能找到合法的解,就会触发回溯。这时会将当前位置的数字重新设为'0',然后返回上一层递归,继续尝试其他数字。这保证了算法能够尝试所有可能的组合,直到找到解或者确定无解。
代码
import sys
matrix = [[0]*9 for _ in range(9)]
for i in range(9):
matrix[i] = sys.stdin.readline().strip().split()
def backtracking(matrix):
for i in range(9):
for j in range(9):
if matrix[i][j] == '0':
for value in range(1,10):
if isValid(matrix, i, j, str(value)):
matrix[i][j] = str(value)
if backtracking(matrix):
return True
matrix[i][j] = '0'
return False
# return False 的作用是通知上层递归栈,当前的尝试并不成功,需要进行回溯。
return True
def isValid(m, x, y, value):
for j in range(9):
if m[x][j] == value:
return False
for i in range(9):
if m[i][y] == value:
return False
xboard = x//3
yboard = y//3
for i in range(xboard*3, (xboard+1)*3):
for j in range(yboard*3, (yboard+1)*3):
if m[i][j] == value:
return False
return True
backtracking(matrix)
for i in range(9):
matrix[i] = list(map(str, matrix[i]))
print(' '.join(matrix[i]))