有n個燈放在一起,從1到n依次順序編號,有n個人也從1到n依次編號。1號將燈全部熄滅,2號將,凡是2的倍數的燈開啟;3號將凡是3的倍數的燈作相反處理(該燈如為開啟,則將他關閉;如果關閉,則將它開啟)。以後的人都和3號一樣,將凡是自己編號倍數的燈作相反處理。
程式設計實現:第n個人操作後,按順序輸出等的狀態(1表示燈開啟,0表示燈熄滅)。
輸入 輸入:n(1<= n <= 2000000),燈的個數
輸出 輸出:燈的狀態,用01序列表示,中間無空格。
輸入示例:
2 輸出示例:
01**實現:
__author__ = 'c08762'
# -*- coding:utf-8 -*-
defis_valid
(numb):
"""輸入合法性檢查,必須輸入正數,不支援科學計數法"""
try:
int(numb)
except:
return
false
else:
if int(numb) < 1
or int(numb) > 2000000:
return
false
else:
return
true
# 接收乙個數,並進行合法性檢查,範圍檢查非必須,n可為任意正整數
num_t = input("pls enter a number between 1 and 2000000:\n")
while
not is_valid(num_t):
num_t = input("that's not a valid number. try again:\n")
num = int(num_t)
# 使用正負號表示燈的狀態
lights = list(range(1, num+1))
for i in range(1, num+1):
for j in range(i-1, num, i):
lights[j] = - lights[j]
# 按題意轉化為0,1表示狀態
for k in range(len(lights)):
if lights[k] > 0:
print(1, end='')
else:
print(0, end='')
# 燈的狀態儲存在列表中
# print(lights)
# for k in range(len(lights)):
# if lights[k] > 0:
# lights[k] = 1
# else:
# lights[k] = 0
# print(lights)
# for i in lights:
# print(i, end='')
# print('\nthere are(is) %d light(s) off.' % lights.count(0))
效果:
pls enter a number between 1 and 2000000:效果2:10 0110111101
pls enter a number between 1 and 2000000:10 [-1, 2, 3, -4, 5, 6, 7, 8, -9, 10]
[0, 1, 1, 0, 1, 1, 1, 1, 0, 1]
0110111101
there are(is) 3 light(s) off.
python書中練習題 python練習題
1 定義乙個空列表,接收從鍵盤輸入的整數,把列表傳給乙個從大到小排序的函式,再輸出排序後的列表的值 listex b 0 a int input 請輸入列表長度 while b a num int input 請輸入字元 b 1 print listex sum 0 for i in range 0...
python的練習題 Python練習題
1 使用while迴圈輸入1 2 3 4 5 6 8 9 10 i 0while i 10 i i 1 if i 7 continue print i 結果 e python python python test.py1 2 求1 100的所有數的和 i 0sum 0 while i 100 i 1...
python練習題目
三色球問題 有紅 黃 藍三種顏色的求,其中紅球 3 個,黃球 3 個,綠球 6 個。先將這 12 個球混合放在乙個盒子中,從中任意摸出 8 個球,程式設計計算摸出球的各種顏色搭配。print red tyellow tblue for red inrange 0,4 for yellow in ra...