题目内容:
数字197可以被称为循环素数,因为197的三个数位循环移位后的数字:197,971,719均为素数。100以内这样的数字包括13个,2,3,5,7,11,13,17,31,37,71,73,79,97。要求任意正整数n以内一共有多少个这样的循环素数。
def isPrime(n): //判断一个数是否为素数
if n <= 1:
return False
i = 2
while i*i <= n:
if n % i == 0:
return False
i += 1
return True
def cycle(num):
//返回一个数的循环数字列表,注意当数字中含有0时不能作为数字第一位
strNum=str(num)
length=len(strNum)
cycle_all=[]
for i in range(length):
number=int(strNum[i:]+strNum[:i]) //将字符串从第i个位置断开成为两个字符串,重新排序
cycle_all.append(number)
return cycle_all
sum=0
n=int(raw_input())
for i in range(2,n):
Flag = True
for j in cycle(i):
if not isPrime(j):
Flag=False
break //判断一个数字的所有循环数是不是质数
if Flag: // 全部是质数就加上1
sum+=1
print sum
题目内容:
一个斐波那契数列的前10项为:1, 2, 3, 5, 8, 13, 21, 34, 55, 89,对于一个最大项的值不超过n的斐波那契数列,求值为偶数的项的和。
这道题目刚开始我用递归写的斐波那契数列,结果发现OJ运行超时了,然后改写了一下,就没问题了
sum=2
i=1
j=2
k=i+j
n=int(raw_input())//不考虑非正常输入
while k<n:
if k %2==0:
sum +=k
z=k
k=j+k
i=j
j=z
print sum
题目内容:
若已知1800年1月1日为星期3,则对于一个给定的年份和月份,输出这个月的最后一天是星期几。
def is_rn(y): //判断年份是否为闰年
if y% 4==0 and y%100!=0 or y%400==0:
return True
else:
return False
def get_days_in_month(y,m): //获得一年中每个月的天数
if m in (1,3,5,7,8,10,12):
return 31
elif m in (4,6,9,11):
return 30
elif is_rn(y):
return 29
else :
return 28
def total_days(y,m): //获得1800年1月1日到现在的天数
days=0
for j in range(1800,y):
if is_rn(j):
days +=366
else :
days+=365
for i in range (1,m+1):
days+=get_days_in_month(y,i)
return days
def gsd(y,m): //求出具体的星期
we=(2+total_days(y,m))%7
return we
y=int(raw_input())
m=int(raw_input())
print gsd(y,m)
题目内容:
如在汉诺塔游戏中,我们希望将塔A上的n个盘子,通过塔B移动到塔C,则对于任意输入的n,给出移动的步骤。
def h(n,A,B,C):
if n==1:
print "Move",n,"from",A,"to",C
else:
h(n-1,A,C,B)
print "Move",n,"from",A,"to",C
h(n-1,B,A,C) //简单的递归调用
n=int(raw_input())
h(n,'A','B','C')