1、推理題
抓了A,B,C,D四名犯罪嫌疑人,其中有一人是小偷,審訊中:
A:我不是小偷;
B:C是小偷;
C:小偷肯定是D;
D:C胡說!
其中有三個人說的是實話,一個人說的是假話,請編程推斷誰是小偷(用窮舉法和邏輯表達式)。
[1]分析:可以遍歷假設某個人是小偷,然後驗證。
[2]代碼
'''第i個人是假話'''
'''i=1的話假設A是小偷'''
for i in range(4):
i += 1
print(i)
if 3 == ((i != 1) + (i == 3) + (i == 4) + (i != 4)):
str = chr(96 + i) + "是小偷"
print(str)
2、有效的數獨
判斷一個 9x9 的數獨是否有效。只需要根據以下規則,驗證已經填入的數字是否有效即可。
數字 1-9 在每一行只能出現一次。
數字 1-9 在每一列只能出現一次。
數字 1-9 在每一個以粗實線分隔的 3x3 宮內只能出現一次。
[1]分析:用三個二維數組來保存行、列、粗線宮,一次遍歷數獨即可判斷是否有重複。
[2]代碼
class Solution(object):
def isValidSudoku(self, board):
"""
:type board: List[List[str]]
:rtype: bool
"""
rows = [[] for _ in range(9)]
columns = [[] for _ in range(9)]
boxes = [[] for _ in range(9)]
for i in range(9):
for j in range(9):
num = board[i][j]
box_index = (i // 3) * 3 + j // 3 #判斷在第幾個粗線宮
if num != '.':
if num in rows[i] or num in columns[j] or num in boxes[box_index]:#判斷行、列、粗線宮是否重複
return False
else:
rows[i].append(num)
columns[j].append(num)
boxes[box_index].append(num)
return True
a = [
["5","3",".",".","7",".",".",".","."],
["6",".",".","1","9","5",".",".","."],
[".","9","8",".",".",".",".","6","."],
["8",".",".",".","6",".",".",".","3"],
["4",".",".","8",".","3",".",".","1"],
["7",".",".",".","2",".",".",".","6"],
[".","6",".",".",".",".","2","8","."],
[".",".",".","4","1","9",".",".","5"],
[".",".",".",".","8",".",".","7","9"]
]
print(Solution().isValidSudoku(a))
3、旋轉圖像
給定一個 n × n 的二維矩陣表示一個圖像。將圖像順時針旋轉 90 度。說明:你必須在原地旋轉圖像,這意味着你需要直接修改輸入的二維矩陣。請不要使用另一個矩陣來旋轉圖像。
[分析]馬上想到zip轉置函數zip(*matrix)。順時針即轉置後每一個元素倒置。
[代碼]
def rotate(matrix):
"""
:type matrix: List[List[int]]
:rtype: void Do not return anything, modify matrix in-place instead.
"""
matrix[:] = [list(x[::-1]) for x in zip(*matrix)]#轉置後每個元素內部倒置
matrix = [
[1,2,3],
[4,5,6],
[7,8,9]
]
rotate(matrix)
print(matrix)
4、批量處理一個文件夾下的圖象
(1)對圖象進行中值濾波,保存濾波結果
(2)對圖象進行直方圖均衡化(即灰度拉伸)
(3)根據圖像特徵,找閾值,提取ROI(感興趣區域)
(4)提取當前文件夾下所有文件名,並寫入到excel中
5、列表
(1)創建一個包含1-100之間所有素數的列表,打印顯示該列表;
(2)隨後只保留該列表前5個數字,刪除其餘內容並打印輸出相應結果;
(3)再將每個元素值加上100,顯示列表內容。
6、輸入某年某月某日,判斷這一天是這一年的第幾天?
7、有一個已經排好序的數組。現輸入一個數,要求按原來的規律將它插入數組中。
8、給定一個沒有重複數字的序列,返回其所有可能的全排列。