多維陣列 15 細菌的繁殖與擴散 python

2021-10-11 18:43:06 字數 3200 閱讀 9934

在邊長為9的正方形培養皿中,正中心位置有m個細菌。假設細菌的壽命僅一天,但每天可繁殖10個後代,而且這10個後代,有兩個分布在原來的單元格中,其餘的均勻分布在其四周相鄰的八個單元格中。求經過n(1≤n≤4)天後,細菌在培養皿中的分布情況。

輸入為兩個整數,第乙個整數m表示中心位置細菌的個數(2 ≤ m ≤ 30),第二個整數n表示經過的天數(1 ≤ n ≤ 4)。

輸出九行九列整數矩陣,每行的整數之間用空格分隔。整個矩陣代表n天後細菌在培養皿上的分布情況。

2 10 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0

0 0 0 2 2 2 0 0 0

0 0 0 2 4 2 0 0 0

0 0 0 2 2 2 0 0 0

0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0

因為細菌的壽命只有一天,所以可以認為後一天的**為全是 0 ,再加上剛繁殖的細菌。所以我的想法是用兩個列表,乙個記錄前一天培養皿的狀態,乙個恒為零,是用來加上剛繁殖的細菌輸出答案的。

然後分析細菌的繁殖與分布位置。我們發現新繁殖的細菌分布在以原先細菌為中心的 3*3 的格仔中。根據題目的描述,如果設原先細菌的數量為 count ,那麼此時的**應為:

[count count count]

[count 2*count count]

[count count count]

因為繁殖一次後有兩個分布在原來的單元格,所以繁殖一次後原先的單元裡有的細菌數量有 2*count 個。

box =[[

0,0,

0,0,

0,0,

0,0,

0],[

0,0,

0,0,

0,0,

0,0,

0,],

[0,0

,0,0

,0,0

,0,0

,0,]

,[0,

0,0,

0,0,

0,0,

0,0,

],[0

,0,0

,0,0

,0,0

,0,0

,],[

0,0,

0,0,

0,0,

0,0,

0,],

[0,0

,0,0

,0,0

,0,0

,0,]

,[0,

0,0,

0,0,

0,0,

0,0,

],[0

,0,0

,0,0

,0,0

,0,0

,]]box1 = box

num, days =

map(

int,

input()

.split())

box1[4]

[4]= num

# step 記錄細菌所在的位置

step =[[

4,4]

]while days >0:

box =[[

0,0,

0,0,

0,0,

0,0,

0],[

0,0,

0,0,

0,0,

0,0,

0,],

[0,0

,0,0

,0,0

,0,0

,0,]

,[0,

0,0,

0,0,

0,0,

0,0,

],[0

,0,0

,0,0

,0,0

,0,0

,],[

0,0,

0,0,

0,0,

0,0,

0,],

[0,0

,0,0

,0,0

,0,0

,0,]

,[0,

0,0,

0,0,

0,0,

0,0,

],[0

,0,0

,0,0

,0,0

,0,0

,]]for j, i in step:

count = box1[j]

[i] box[j]

[i]+=

2* count

# 原先細菌周圍的八個位置細菌數量都增加 count 個

for new_x, new_y in

[[j-

1, i-1]

,[j-

1, i]

,[j-

1, i+1]

,[j, i-1]

,[j, i+1]

,[j+

1, i-1]

,[j+

1, i]

,[j+

1, i+1]

]:box[new_x]

[new_y]

+= count

# 用 list1 作為過渡的列表,避免下面的迴圈無法退出

list1 =

for j, i in step:

for new_x, new_y in

[[j-

1, i-1]

,[j-

1, i]

,[j-

1, i+1]

,[j, i-1]

,[j, i+1]

,[j+

1, i-1]

,[j+

1, i]

,[j+

1, i+1]

]:# if 語句避免將重複的位置加入列表

if[new_x, new_y]

notin list1 and

[new_x, new_y]

notin step:

[new_x, new_y]

)for i in list1:

box1 = box

days -=

1for i in box:

s =""for j in i:

s +=

str(j)

+" "

print

(s.rstrip(

))

細菌的繁殖與擴散

描述 在邊長為9的正方形培養皿中,正中心位置有m個細菌。假設細菌的壽命僅一天,但每天可繁殖10個後代,而且這10個後代,有兩個分布在原來的單元格中,其餘的均勻分布在其四周相鄰的八個單元格中。求經過n 1 n 4 天後,細菌在培養皿中的分布情況。輸入輸入為兩個整數,第乙個整數m表示中心位置細菌的個數 ...

細菌的繁殖與擴散 求助

在邊長為9的正方形培養皿中,正中心位置有m個細菌。假設細菌的壽命僅一天,但每天可繁殖10個後代,而且這10個後代,有兩個分布在原來的單元格中,其餘的均勻分布在其四周相鄰的八個單元格中。求經過n天後,細菌在培養皿中的分布情況。輸出九行九列整數矩陣,每行的整數之間用空格分隔。整個矩陣代表n天後細菌在培養...

陣列與多維陣列的定義與使用

簡述 陣列是可以用於儲存多個相同型別的資料。陣列的定義分三步 建立物件 分配空間 賦值定義 int a 僅定義乙個陣列物件a。a newint 5 int b newint 5 5代表該陣列的長度 int c 在建立物件時就賦值,可以new int,因為數值時系統會自動根據數值長度分配空間使用 陣列...