Python-报时助手、回形取数、芯片测试、FJ的字符串、Sine之舞 程序设计

报时助手

给定当前的时间,请用英文的读法将它读出来。
时间用时h和分m表示,在英文的读法中,读一个时间的方法是:
如果m为0,则将时读出来,然后加上“o’clock”,
如3:00读作“three o’clock”。
如果m不为0,则将时读出来,然后将分读出来,
如5:30读作“five thirty”。
时和分的读法使用的是英文数字的读法,其中0~20读作:
0:zero, 1: one, 2:two, 3:three, 4:four, 5:five, 6:six, 7:seven,
8:eight, 9:nine, 10:ten, 11:eleven, 12:twelve, 13:thirteen,
14:fourteen, 15:fifteen, 16:sixteen, 17:seventeen, 18:eighteen,
19:nineteen, 20:twenty。
30读作thirty,40读作forty,50读作fifty。
对于大于20小于60的数字,首先读整十的数,然后再加上个位数。
如31首先读30再加1的读法,读作“thirty one”。
按上面的规则21:54读作“twenty one fifty four”,
9:07读作“nine seven”,0:15读作“zero fifteen”。
输入
输入包含两个非负整数h和m,表示时间的时和分。非零的数字前没有前导0。h小于24,m小于60。
输出
输出时间时刻的英文。
样例输入
0 15
样例输出
zero fifteen

#分析题目可得应写出两个分支
#定义一个函数去实现返回一个数对应的英文
Dic1={0:'zero',1:'one',2:'two',3:'three',4:'four',5:'five',6:'six',7:'seven',
      8:'eight',9:'nine',10:'ten',11:'eleven',12:'twelve',13:'thirteen',
     14:'fourteen',15:'fifteen',16:'sixteen',17:'seventeen',18:'eighteen',19:'nineteen',20:'twenty'}
Dic2={2:'twenty',3:'thirty',4:'forty',5:'fifty'} #定义两个字典存放对应的数英关系
L = [int(i) for i in input().split()] #L=list(map(int,input(),split()))
re = ' '
def string(n): #定义string函数实现一个分支
    global Dic1,Dic2
    if n<=20: #若n<20,直接返回字典1对应英文
        return Dic1[n]
    else: #若非,对于大于20小于60的数字,首先读整十的数,然后再加上个位数
        L1 = list(str(n))
        re = Dic2[int(L1[0])]+' '+Dic1[int(L1[1])]
        return re
if L[1]==0: #另一个分支
    print(string(L[0])+" o'clock") #如果m为0,则将时读出来,然后加上“o'clock”
else:
    print(string(L[0])+" "+string(L[1])) #如果m不为0,则将时读出来,然后将分读出来

回形取数

回形取数就是沿矩阵的边取数,若当前方向上无数可取或已经取过,则左转90度。
一开始位于矩阵左上角,方向向下。
输入
输入第一行是两个不超过200的正整数m, n,表示矩阵的行和列。
接下来m行每行n个整数,表示这个矩阵。
输出
输出只有一行,共mn个数,为输入矩阵回形取数得到的结果。
数之间用一个空格分隔,行末不要有多余的空格。
样例输入
3 3
1 2 3
4 5 6
7 8 9
样例输出
1 4 7 8 9 6 3 2 5

m,n = map(int,input().split())
ls = []
for i in range(m):
    ls.append(list(input().split())) #[[第一行 列表表示为0],[第二行],[第三行],[第n行]] eg:[[1 2 3],[4 5 6],[7 8 9]]
#print(ls)
i,j = 0,0    #i表示行,j表示列
flag = "D"    #从向下走开始
result = []    #存结果
while True:
    if i<0 or j<0 or i>=m or j>=n or ls[i][j] == 'go':
        #“i<0 or j<0 or i>=m or j>=n”这一段要加,不然一些单行,
        #单列(n=1 or m=1)的用例通不过
        break
    result.append(ls[i][j])
    ls[i][j] = 'go'
    if flag == "D":  #下 当此时为下时,不断读到result结果集中
        i += 1
    elif flag == "R":   #右
        j += 1
    elif flag == "U":  #上
        i -= 1
    elif flag == "L":  #左
        j -= 1
    if flag == "D" and (i>=m or ls[i][j]=='go'): #下转右
        flag = "R"
        i -= 1
        j += 1
    elif flag == "R" and (j>=n or ls[i][j]=='go'): #右转上
        flag = "U"
        j -= 1
        i -= 1
    elif flag == "U" and (i<0 or ls[i][j] == 'go'): #上转左
        flag = "L"
        i += 1
        j -= 1
    elif flag == "L" and (j<0 or ls[i][j] == 'go'): #左转下
        flag = "D"
        j += 1
        i += 1
      
'''
ls.append(list(map(int,input().split())))
for i in range(len(result)):
    if i == len(result) -1: #最后一个
        print(result[i])
    else:
        print(result[i],end=" ")'''
print(" ".join(result))

芯片测试

有n块芯片,有好有坏,已知好芯片比坏芯片多。
每个芯片都能用来测试其他芯片。用好芯片测试其他芯片时,
能正确给出被测试芯片是好还是坏。而用坏芯片测试其他芯片时,
会随机给出好或是坏的测试结果
(即此结果与被测试芯片实际的好坏无关)。
给出所有芯片的测试结果,问哪些芯片是好芯片。
输入
输入数据第一行为一个整数n,表示芯片个数。
第二行到第n+1行为n*n的一张表,每行n个数据。表中的每个数据为0或1,
在这n行中的第i行第j列(1≤i, j≤n)的数据表示用第i块芯片测试第j块芯片时得到的测试结果,
1表示好,0表示坏,i=j时一律为1(并不表示该芯片对本身的测试结果。芯片不能对本 身进行测试)。
(2≤n≤20)
输出
按从小到大的顺序输出所有好芯片的编号
样例输入
3
1 0 1
0 1 0
1 0 1
样例输出
1 3

#好芯片的测试结果一定相同,好芯片比坏芯片多,
#统计一下相同的测试结果,相同的数据数量大于芯片数量的一半,
#那么这组测试结果就是好芯片
n=int(input())
arr=[]
for i in range(n):
    arr.append(list(map(int,input().split())))#arr列表存放芯片的测试结果
for j in range(n):
    num=0
    for i in range(n):
        if arr[i][j]==1:
            num+=1
    if num>n/2:
        print(j+1,end=' ')

FJ的字符串

FJ在沙盘上写了这样一些字符串:
A1 = “A”
A2 = “ABA”
A3 = “ABACABA”
A4 = “ABACABADABACABA” #沿对称轴对称
… …
你能找出其中的规律并写所有的数列AN吗?
对称加
输入
仅有一个数:N ≤ 26。
输出
请输出相应的字符串AN,以一个换行符结束。输出中不得含有多余的空格或换行、回车符。
样例输入
3
样例输出
ABACABA

方法一:

n = int(input())
s="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
l="A"
for i in range(1,n):
    l=l+s[i]+l
print(l)

方法二:

n = int(input())
s = ""
p = 65
for i in range(n):
    s = s + chr(p) + s
    p += 1
print(s)

Sine之舞

最近FJ为他的奶牛们开设了数学分析课,FJ知道若要学好这门课,必须有一个好的三角函数基本功。
所以他准备和奶牛们做一个“Sine之舞”的游戏,寓教于乐,提高奶牛们的计算能力。
不妨设
An=sin(1–sin(2+sin(3–sin(4+…sin(n))…)
Sn=(…(A1+n)A2+n-1)A3+…+2)An+1
FJ想让奶牛们计算Sn的值,请你帮助FJ打印出Sn的完整表达式,以方便奶牛们做题。
输入
仅有一个数:N<201。
输出
请输出相应的表达式Sn,以一个换行符结束。输出中不得含有多余的空格或换行、回车符。
样例输入
3
样例输出
((sin(1)+3)sin(1-sin(2))+2)sin(1-sin(2+sin(3)))+1

#先表示an,再表示sn
n = int(input())
#An=sin(1–sin(2+sin(3–sin(4+...sin(n))...)
def an(n):
    for i in range(1,n+1):
        print('sin(',end='')
        print(i,end='')
        if i != n:
            if i%2!=0:
                print('-',end='')
            else:
                print('+',end='')
    for i in range(1,n+1):
        print(')',end='')
    return ''
#Sn=(...(A1+n)A2+n-1)A3+...+2)An+1
def sn(n):
    for i in range(1,n):
        print('(',end='')
    for i in range(1,n+1):
        print(an(i),end='')
        print('+',end='')
        print(n-i+1,end='')
        if i!=n:
            print(')',end='')
sn(n)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值