Python的几个小程序

题目内容:
数字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):        //获得180011日到现在的天数
    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')
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值