python算法题

题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的四位数?都是多少?
 
   
for a in range( 1, 5):
for b in range( 1, 5):
for c in range( 1, 5):
for d in range( 1, 5):
if(a!=b and a!=c and a!=d and b!=c and b!=d and c!=d):
print(a,b,c,d)
运行结果
注意:
  • start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
  • stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
  • step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)

2 题目:打印出国际象棋图
python算法题_第1张图片
分析:行为0-7,列为0-7,当行列之和为奇数时为黑色

python算法题_第2张图片
 
  
import sys
for i in range( 8):
for j in range( 8):
if (i + j) % 2 != 0:
print( chr( 219), end= '')
print( chr( 219), end= '')
else: print( ' ', end= '')
print( ' \n ', end= '')
python算法题_第3张图片
3题目: 输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数
判断是否为字母:str.isspace
判断是否为空格:str.isalpha
判断是否为数字:str.isdigit
判断是否为其他字符:前三种都不是就是其他字符
输入: str = input( 'please input a string:\n' )
 
  
space = 0
digit= 0
alpha= 0
other= 0
str = "12jdfj wjdf dfj wejwi jsdifj,,nfiraj "
for i in str:
if(i.isalpha()):
alpha=alpha+ 1  
   if(i.isspace()):
space=space+ 1  
   if(i.isdigit()):
digit=digit+ 1  
   else:
other=other+ 1
print( "space=",space, "digit=",digit, "alpha=",alpha, "other=",other)
运行结果:

space= 5 digit= 2 alpha= 28 other= 35

4 题目 汉诺塔

Hanoi塔问题,算法分析如下,设A上有n个盘子(编号由上到下:1、2、3……、n)。A:初始塔,B:中转塔,C:目标塔
    a、如果n=1,则将盘子从A塔直接移动到C塔(借助B塔)。
    b、如果n=3,则:
    (1)将A塔上编号1~2的盘子(2个盘子)移动到B塔上(借助C塔);
    (2)将A塔上编号3的盘子(最后一个盘子)移动到C塔上;
     (3)将B塔上编号1~2的盘子(2个盘子)移动到C塔上(借助A塔)。
     c、延伸,如果n=num,则:
    (1)将A塔上编号1~num-1的盘子(num-1个盘子)移动到B塔上(借助C塔);
    (2)将A塔上编号num的盘子(最后一个盘子)移动到C塔上;
    (3)将B塔上编号1~num-1的盘子(num-1个盘子)移动到C塔上(借助A塔
代码:

 
  

def move(n,a,c):   
global i   
print( "第%d步:%d号盘子移动 初始塔%s到目标塔%s" % (i, n, a, c))
i+= 1
def hanoi(n,a,b,c):
#n:移动个数,a:from b:中转c:目标    
if(n== 1):
move( 1,a,c)   
else:
hanoi(n- 1,a,c,b) #n-1个从a中转c到b
move(n,a,c) #第n个从a到c  
hanoi(n- 1,b,a,c) #n-1个从a中转a到c
if __name__ == '__main__':
i= 1
n= 4
hanoi(n, "A", "B", "C")

运行结果:
python算法题_第4张图片
5 题目:打印出菱形
代码:
n=int(input("请输入一个数字:"))
for i in range(n):
    for m in range(n -1- i):
        print(" ", sep='', end='')
    for j in range(2*i+1):
        print("*",sep='',end='')
    print("\n",sep='', end='')
for i in range(n):
    for m in range(i):
        print(" ", sep='', end='')
    for j in range(2*n-2*i-1):
        print("*",sep='',end='')
    print("\n",sep='', end='')
运行结果:
python算法题_第5张图片

6题目 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和
 
   
a= 2b= 1s=a/b for i in range( 19): c=a a=a+b b=c s=s+a/b print(s)
运行结果:
7 题目: 回数是指从左向右读和从右向左读都是一样的数,例如123321,909。请利用filter()滤掉非回数
filter()把传入的函数一次作用于每个元素,然后如果返回值是True,则保留该元素,如果返回值为False,则丢弃该元素。
利用切片方法:[::-1]含义就是,所有列表里的数,每负1,取一个。也就是将所有元素反向。 
#原始方法
def first(n):
  for i in range(n+1):
    s=str(i)
    if(s==s[::-1]):
        print(s," ", end="")
#filter()
def huishu(n):
    s = str(n)
    return s == s[::-1]
if __name__ == "__main__":
    n = int(input("您要查询前多少的回数?\n请您输入:"))
    print("原始方法:")
    first(n+1)
    print("\t")
    print("filter():")
    result = filter(huishu,range(1,(n+1)))
    print(list(result))
运行结果:
   

你可能感兴趣的:(语言)