# -*- coding: utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding("utf-8")
"""created on wed dec 07 18:43:25 2016
趣味百題之趣味猜想
@author: onlyyo
"""# 1.
'''角谷猜想的內容為:任意給定乙個自然數,若它為偶數則除以2,
若它為奇術則乘3加1,得到乙個新的自然數。按照這樣的計算方法計算下去,
若干次後得到的結果必然為1。編寫程式對角谷猜想的正確性加以驗證。
'''def fun1(n):
while true:
if n%2 == 0:
n = n/2
else:
n = 3*n + 1
if n==1:
return 1
break
# print fun1(10)
# 2.
'''「回文數」是一種數字。如:98789,這個數字正讀是98789,倒讀也是98789,
正讀倒讀一樣,所以這個數字就是回文數。程式設計判斷乙個數是否是回文數。
'''def fun2(n):
a =
while n:
n /= 10
for i in xrange(len(a)):
if a[i] != a[-i-1]:
break
else:
print '回文數'
return true
print '非回文數'
return false
# fun2(78987)
# 3.
'''任意乙個不是用完全相同數字組成的四位數,如果對它們的每位數字重新排序,
組成乙個較大的數和乙個較小的數,然後用較大的數減去較小數,不夠四位數時補零,
類推下去,最後將變成乙個固定的數:6174,這就是卡布列克常數。'''
def fun3(n):
if n == 6174:
print "是乙個布列克常數!".format(n)
while true:
lista = list(str(n))
lista.sort()
max = int(lista[3])*1000 + int(lista[2])*100 + int(lista[1])*10 + int(lista[0])
min = int(lista[0])*1000 + int(lista[1])*100 + int(lista[2])*10 + int(lista[3])
n = max - min
if n < 1000:
n = n*10
if n == 6174:
print "是乙個布列克常數!".format(n)
break
#fun3(4321)
#4.'''「今有物不知其數,三三數之乘二,五五數之乘三,七七數之乘二,問物幾何?」
按照今天的話來說:乙個數除以3餘2,除以5餘3,除以7餘2。 '''
def fun4():
n = 1
while true:
if n % 3 == 2:
if n % 5 == 3:
if n % 7 == 2:
print n
break
else:
n += 1
continue
else:
n += 1
continue
else:
n += 1
continue
fun4()
# 5.
'''驗證尼克斯徹定理,即任何乙個整數的立方都可以寫成一串連續奇數的和,如下所示:
1³ =1
2³=3+5
3³=7+9+11
4³=13+15+17+19
......'''
def fun5(n):
z = n**3
a = n**2 - n + 1
temp =
for i in xrange(n):
if sum(temp) == z:
return temp
print temp
#l = fun5(6)
#6.'''西洋棋的棋盤有8行8列共64個單元格,無論將馬放於棋盤的哪個單元格,都可讓馬踏遍棋盤的
每個單元格。問馬應該怎麼走才可以踏遍棋盤的每個單元格?'''
# 遍歷64個格仔,--------------不太懂
l = 8
m = [0] * (l * l)
def allentry(x, y, m):
t = [(x + i, y + k * 2 / i) for i in (-1, 1, -2, 2) for k in (-1, 1)]
return [(ex, ey) for ex, ey in t if -1 < ex < l and -1 < ey < l and m[l * ex + ey] == 0]
def sortedentrylist(x, y, m):
a = [8]
res =
for ex, ey in allentry(x, y, m):
c = len(allentry(ex, ey, m))
for i, t in enumerate(a):
if c <= t: break
a.insert(i, c)
res.insert(i, (ex, ey))
return res
def show(m):
print 'show:'
for i in xrange(l):
print m[i * l:i * l + l]
print
def move(x, y, m, n):
m[l * x + y] = n
if n == l * l:
show(m)
return
for ex, ey in sortedentrylist(x, y, m):
move(ex, ey, m[:], n + 1)
move(0, 0, m, 1)
python趣味題 python 趣味百題3
等差素數數列 類似7 37 67 97 107 137 167 197這樣由素數組成的數列。素數數列具有項數的限制,一般指素數數列的項數有多少個連續項,最多可以存在多少個連續項 程式設計找出100以內的等差素數數列 思路 1.篩法找出100以內所有素數 2.對於素數list內兩兩組合,構造等差數列a...
MySQL趣味題 Hankson的趣味題
思路 由於x是b1的約數,所以x的質因子一定也是b1的質因子,我們可以對b1的每個質因子p,分別計算a0,a1,b0,b1分別 包含多少個p.然後討論x可能含有幾個p即可 include include include include include include using namespace ...
趣味問題之趣味整數
coding utf 8 created on thu nov 17 16 52 17 2016 author alis 趣味百題之趣味整數 求乙個數的所有因子 def factors num p 1 q num a while p q if num p 0 p 1 q num p a.sort r...