藍橋杯 生物晶元 (Python 實現)

2021-10-19 11:37:42 字數 1771 閱讀 5141

題目:

x博士正在研究一種生物晶元,其邏輯密集度、容量都遠遠高於普通的半導體晶元。

博士在晶元中設計了 n 個微型光源,每個光源操作一次就會改變其狀態,即:點亮轉為關閉,或關閉轉為點亮。

這些光源的編號從 1 到 n,開始的時候所有光源都是關閉的。

博士計畫在晶元上執行如下動作:

所有編號為2的倍數的光源操作一次,也就是把 2 4 6 8 … 等序號光源開啟

所有編號為3的倍數的光源操作一次, 也就是對 3 6 9 … 等序號光源操作,注意此時6號光源又關閉了。

所有編號為4的倍數的光源操作一次。

…直到編號為 n 的倍數的光源操作一次。

x博士想知道:經過這些操作後,某個區間中的哪些光源是點亮的。

輸入

3個用空格分開的整數:n l r (l輸出

輸出1個整數,表示經過所有操作後,[l,r] 區間中有多少個光源是點亮的。

樣例輸入

5 2 3

樣例輸出

最開始自己在vscode中寫的**,但是在**上提交 超出了限制。。但是示例是能通過的。

n,l,r=

100,50,

84light=[-

1]*(r-l+1)

#-1代表燈泡熄滅,+1代表燈泡被點亮

for a in ran+ge(

2,n1)

:for b in

range

(l,r+1)

: c=b

if c%a==0:

light[b-l]*=(

-1)print

(light.count(1)

)

然後看了題解,但是沒想明白為什麼出現當前燈泡編號的開平方根再平方不同時當前的燈泡最後就處於點亮的狀態。

math模組中的sqrt(x)**2,有的數字是會不等於自己的。比如當x==7的時候。↓↓↓

import math

print

(math.sqrt(7)

**2)

執行結果:然後就手動弄了一下示例實驗了一下,確實有這麼乙個規律

分別是5個燈泡和7個燈泡的。

0代表熄滅,1代表點亮

00000

01010

01110

01100

01101

最後別點亮的燈泡的編號是2,3,5

0000000

0101010

0111000

0110000

0110100

0110110

0110111

最後別點亮的燈泡的編號是2,3,5,6,7

import math 

n,l,r =

map(

int,

input()

.split())

count =

0for i in

range

(l,r+1)

:ifint(math.sqrt(i))**

2!= i:

count +=

1print

(count)

藍橋杯 生物晶元 Python

題目 x博士正在研究一種生物晶元,其邏輯密集度 容量都遠遠高於普通的半導體晶元。博士在晶元中設計了 n 個微型光源,每個光源操作一次就會改變其狀態,即 點亮轉為關閉,或關閉轉為點亮。這些光源的編號從 1 到 n,開始的時候所有光源都是關閉的。博士計畫在晶元上執行如下動作 所有編號為2的倍數的光源操作...

藍橋杯 生物晶元

x博士正在研究一種生物晶元,其邏輯密集度 容量都遠遠高於普通的半導體晶元。博士在晶元中設計了 n 個微型光源,每個光源操作一次就會改變其狀態,即 點亮轉為關閉,或關閉轉為點亮。這些光源的編號從 1 到 n,開始的時候所有光源都是關閉的。博士計畫在晶元上執行如下動作 所有編號為2的倍數的光源操作一次,...

藍橋杯 生物晶元 python解法

題目 x博士正在研究一種生物晶元,其邏輯密集度 容量都遠遠高於普通的半導體晶元。博士在晶元中設計了 n 個微型光源,每個光源操作一次就會改變其狀態,即 點亮轉為關閉,或關閉轉為點亮。這些光源的編號從 1 到 n,開始的時候所有光源都是關閉的。博士計畫在晶元上執行如下動作 所有編號為2的倍數的光源操作...