• 【基础编程题目集编程题及其答案】



    这些编程题目也是弄了许久才弄出来的,大家有需要的可以看看,如果有什么不足的地方,还请大家多多指教。毕竟,我们可以一起加油,共同进步,对吧


    7-1 厘米换算英尺英寸~15

    如果已知英制长度的英尺foot和英寸inch的值,那么对应的米是(foot+inch/12)×0.3048。现在,如果用户输入的是厘米数,那么对应英制长度的英尺和英寸是多少呢?别忘了1英尺等于12英寸。

    输入格式:

    输入在一行中给出1个正整数,单位是厘米。

    输出格式:

    在一行中输出这个厘米数对应英制长度的英尺和英寸的整数值,中间用空格分开。

    输入样例:

    170
    
    • 1

    输出样例:

    5 6
    
    • 1

    代码长度限制
    16 KB
    时间限制
    400 ms
    内存限制
    64 MB

    题解:

    n = int(input())
    foot = n // 0.3048 // 100       # 注意这里用//(整除
    inch = 12*(n/(0.3048*100)-foot) # 这样就可得出题目所需要的整数值
    print("%d %d" % (foot, inch))
    
    • 1
    • 2
    • 3
    • 4

    7-2 然后是几点~15

    有时候人们用四位数字表示一个时间,比如 1106 表示 11 点零 6 分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。

    读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,例如 5 点 30 分表示为 530;0 点 30 分表示为 030。注意,第二个数字表示的分钟数可能超过 60,也可能是负数。

    输入格式:

    输入在一行中给出 2 个整数,分别是四位数字表示的起始时间、以及流逝的分钟数,其间以空格分隔。注意:在起始时间中,当小时为个位数时,没有前导的零,即 5 点 30 分表示为 530;0 点 30 分表示为 030。流逝的分钟数可能超过 60,也可能是负数。

    输出格式:

    输出不多于四位数字表示的终止时间,当小时为个位数时,没有前导的零。题目保证起始时间和终止时间在同一天内。

    输入样例:

    1120 110
    
    • 1

    输出样例:

    1310
    
    • 1

    鸣谢燕山大学穆运峰老师、用户任钰补充数据!

    代码长度限制
    16 KB
    时间限制
    400 ms
    内存限制
    64 MB

    题解:

    sj, m = map(int, input().split())
    nowH = sj // 100                # 得到时间的前两位,即小时数
    nowM = sj % 100                 # 得到时间的后两位,即分钟数
    newSj = nowH * 60 + nowM + m    # 小时数转化为分钟数,在全部相加,得出全部分钟数
    newH = newSj // 60              # 注意,必须得用//
    newM = newSj % 60
    print("%d%02d" % (newH, newM))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    7-3 逆序的三位数~10

    程序每次读入一个正3位数,然后输出按位逆序的数字。注意:当输入的数字含有结尾的0时,输出不应带有前导的0。比如输入700,输出应该是7。

    输入格式:

    每个测试是一个3位的正整数。

    输出格式:

    输出按位逆序的数。

    输入样例:

    123
    
    • 1

    输出样例:
    321
    鸣谢安阳师范学院软件学院李康康同学补充数据!

    代码长度限制
    16 KB
    时间限制
    400 ms
    内存限制
    64 MB

    题解:

    n = input()
    n = list(n)                                         # 将要输出的转换为列表,便于逆序
    # print(n)
    a, b, c = int(n[0]), int(n[1]), int(n[2])
    if n[0] != '0' and n[1] == '0' and n[2] == '0':     # 当后两位都为0时,输出结果只是第一位
        print(n[0])
    elif n[0] != '0' and n[1] != '0' and n[2] == '0':   # 当最后一位为0时,输出结果时一二位
        print(n[1], n[0], sep='', end='')
    else:                                               # 除了以上情况,其他的都是全部逆序输出即可
        print(c, b, a, sep='', end='')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    BCD解密~10

    BCD数是用一个字节来表达两位十进制的数,每四个比特表示一位。所以如果一个BCD数的十六进制是0x12,它表达的就是进制的12。但是小明没学过BCD,把所有的BCD数都当作二进制数转换成十进制输出了。于是BCD的0x12被输出成了十进制的18了!

    现在,你的程序要读入这个错误的十进制数,然后输出正确的十进制数。提示:你可以把18转换回0x12,然后再转换回12。

    输入格式:

    输入在一行中给出一个[0, 153]范围内的正整数,保证能转换回有效的BCD数,也就是说这个整数转换成十六进制时不会出现A-F的数字。

    输出格式:

    输出对应的十进制数。

    输入样例:

    18
    
    • 1

    输出样例:

    12
    
    • 1

    代码长度限制
    16 KB
    时间限制
    400 ms
    内存限制
    64 MB

    题解:

    n = int(input())
    a = n // 16
    b = n % 16
    c = a * 10 + b
    print("%d" % c)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    下面这种比较简单,用了切片的方法

    n = int(input())
    h = hex(n)
    print(h[2:])    # 切片
    
    • 1
    • 2
    • 3

    7-5 表格输出~5

    本题要求编写程序,按照规定格式输出表格。

    输入格式:
    本题目没有输入。

    输出格式:
    要求严格按照给出的格式输出下列表格:

    ------------------------------------
    Province      Area(km2)   Pop.(10K)
    ------------------------------------
    Anhui         139600.00   6461.00
    Beijing        16410.54   1180.70
    Chongqing      82400.00   3144.23
    Shanghai        6340.50   1360.26
    Zhejiang      101800.00   4894.00
    ------------------------------------
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    代码长度限制
    16 KB
    时间限制
    400 ms
    内存限制
    64 MB

    题解:

    print(
    '''------------------------------------
    Province      Area(km2)   Pop.(10K)
    ------------------------------------
    Anhui         139600.00   6461.00
    Beijing        16410.54   1180.70
    Chongqing      82400.00   3144.23
    Shanghai        6340.50   1360.26
    Zhejiang      101800.00   4894.00
    ------------------------------------''', end='')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    7-6 混合类型数据格式化输入~5

    本题要求编写程序,顺序读入浮点数1、整数、字符、浮点数2,再按照字符、整数、浮点数1、浮点数2的顺序输出。

    输入格式:

    输入在一行中顺序给出浮点数1、整数、字符、浮点数2,其间以1个空格分隔。

    输出格式:

    在一行中按照字符、整数、浮点数1、浮点数2的顺序输出,其中浮点数保留小数点后2位。

    输入样例:

    2.12 88 c 4.7
    
    • 1

    输出样例:

    c 88 2.12 4.70
    
    • 1

    代码长度限制
    16 KB
    时间限制
    400 ms
    内存限制
    64 MB

    题解:

    f1, b, c, f2 = input().split()
    f1, f2 = float(f1), float(f2)
    b = int(b)
    print("%s %d %.2f %.2f"%(c,b,f1,f2))    # 注意字符的%s对应输出
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

    7-7 12-24小时制~15

    编写一个程序,要求用户输入24小时制的时间,然后显示12小时制的时间。

    输入格式:

    输入在一行中给出带有中间的:符号(半角的冒号)的24小时制的时间,如12:34表示12点34分。当小时或分钟数小于10时,均没有前导的零,如5:6表示5点零6分。

    提示:在scanf的格式字符串中加入:,让scanf来处理这个冒号。

    输出格式:
    
    • 1

    在一行中输出这个时间对应的12小时制的时间,数字部分格式与输入的相同,然后跟上空格,再跟上表示上午的字符串AM或表示下午的字符串PM。如5:6 PM表示下午5点零6分。注意,在英文的习惯中,中午12点被认为是下午,所以24小时制的12:00就是12小时制的12:0 PM;而0点被认为是第二天的时间,所以是0:0 AM。

    输入样例:

    21:11
    
    • 1

    输出样例:

    9:11 PM
    
    • 1

    代码长度限制
    16 KB
    时间限制
    400 ms
    内存限制
    64 MB

    题解:

    a, b = map(int, input().split(':'))     # 将小时数和分钟数按整型输入,中间以:隔开
    if a > 12:
        print("%d:%d PM" % ((a-12), b))     # 超过12点的 PM
    elif a == 12:                           # 处于12点的 PM
        print("%d:%d PM" % (a, b))
    else:                                   # 低于12点 AM
        print("%d:%d AM" % (a, b))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    7-8 超速判断~10

    模拟交通警察的雷达测速仪。输入汽车速度,如果速度超出60 mph,则显示“Speeding”,否则显示“OK”。

    输入格式:

    输入在一行中给出1个不超过500的非负整数,即雷达测到的车速。

    输出格式:

    在一行中输出测速仪显示结果,格式为:Speed: V - S,其中V是车速,S或者是Speeding、或者是OK

    输入样例1:

    40
    
    • 1

    输出样例1:

    Speed: 40 - OK
    
    • 1

    输入样例2:

    75
    
    • 1

    输出样例2:

    Speed: 75 - Speeding
    
    • 1

    代码长度限制
    16 KB
    时间限制
    400 ms
    内存限制
    64 MB

    题解:

    v = int(input())
    if v > 60:      # 超速
        print(f"Speed: {v} - Speeding")
    else:           # 未超速
        print(f"Speed: {v} - OK")
    
    • 1
    • 2
    • 3
    • 4
    • 5

    7-9 用天平找小球~10

    三个球A、B、C,大小形状相同且其中有一个球与其他球重量不同。要求找出这个不一样的球。

    输入格式:

    输入在一行中给出3个正整数,顺序对应球A、B、C的重量。

    输出格式:

    在一行中输出唯一的那个不一样的球。

    输入样例:

    1 1 2
    
    • 1

    输出样例:

    C
    
    • 1

    代码长度限制
    16 KB
    时间限制
    400 ms
    内存限制
    64 MB

    题解:

    a, b, c = map(int, input().split())
    if a == b and (a != c or b != c):       # 如果a, b球重量相等,且a球或者b球和c球重量不同
        print("C")
    elif b == c and (b != a or c != a):     # 如果b, c球重量相等,且b球或者c球和a球重量不同
        print("A")
    else:
        print("B")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    7-10 计算工资~15

    某公司员工的工资计算方法如下:一周内工作时间不超过40小时,按正常工作时间计酬;超出40小时的工作时间部分,按正常工作时间报酬的1.5倍计酬。员工按进公司时间分为新职工和老职工,进公司不少于5年的员工为老职工,5年以下的为新职工。新职工的正常工资为30元/小时,老职工的正常工资为50元/小时。请按该计酬方式计算员工的工资。

    输入格式:

    输入在一行中给出2个正整数,分别为某员工入职年数周工作时间,其间以空格分隔。

    输出格式:

    在一行输出该员工的周薪,精确到小数点后2位。

    输入样例1:

    5 40
    
    • 1

    输出样例1:

    2000.00
    
    • 1

    输入样例2:

    3 50
    
    • 1

    输出样例2:

    1650.00
    
    • 1

    代码长度限制
    16 KB
    时间限制
    400 ms
    内存限制
    64 MB

    题解:

    a, b = map(int, input().split())
    if b <= 40:         # 一周内工作时间不超过40小时
        if a >= 5:      # 符合上面条件,且是老职工
            print("%.2f" % (b*50))
        else:           # 符合上面条件,且是新职工
            print("%.2f" % (b*30))
    else:               # 一周内工作时间超过40小时的
        if a >= 5:
            print("%.2f" % (40*50+((b-40)*50)*1.5))
        else:
            print("%.2f" % (40*30+((b-40)*30)*1.5))
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    休息一眼-10:

    想提升自己的意志力,就必须认识自己的弱点,克服弱点,这样才能不被他牵制。

    弱点不可怕,不能够改变弱点才可怕。


    7-11 分段计算居民水费~10

    为鼓励居民节约用水,自来水公司采取按用水量阶梯式计价的办法,居民应交水费y(元)与月用水量x(吨)相关:当x不超过15吨时,y=4x/3;超过后,y=2.5x−17.5。请编写程序实现水费的计算。

    输入格式:

    输入在一行中给出非负实数x。

    输出格式:

    在一行输出应交的水费,精确到小数点后2位。

    输入样例1:

    12
    
    • 1

    输出样例1:

    16.00
    
    • 1

    输入样例2:

    16
    
    • 1

    输出样例2:

    22.50
    
    • 1

    代码长度限制
    16 KB
    时间限制
    400 ms
    内存限制
    64 MB

    题解:

    x = int(input())
    y = 0               # 存储最后的水费
    if x < 15:          # 当用水不超过15吨
        y = 4*x/3
    else:
        y = 2.5*x - 17.5
    print("%.2f" % y)   # 结果保留两位小数
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    7-12 两个数的简单计算器~10

    本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加、减、乘、除或求余运算。题目保证输入和输出均不超过整型范围。

    输入格式:

    输入在一行中依次输入操作数1、运算符、操作数2,其间以1个空格分隔。操作数的数据类型为整型,且保证除法和求余的分母非零。

    输出格式:

    当运算符为+、-、*、/、%时,在一行输出相应的运算结果。若输入是非法符号(即除了加、减、乘、除和求余五种运算符以外的其他符号)则输出ERROR

    输入样例1:

    -7 / 2
    
    • 1

    输出样例1:

    -3
    
    • 1

    输入样例2:

    3 & 6
    
    • 1

    输出样例2:

    ERROR
    
    • 1

    代码长度限制
    16 KB
    时间限制
    400 ms
    内存限制
    64 MB

    题解:

    a, b, c = input().split()       # b为运算符号
    a, c = int(a), int(c)
    # 运算符只能为这些
    if b == '+' or b == "-" or b == "*" or b == "/" or b == "%":   
        if b == '+':
            print(a+c)
        elif b == '-':
            print(a-c)
        elif b == '*':
            print(a*c)
        elif b == '%' and c == 0:
            print("ERROR")
        elif b == '%':
            print(a % c)
        elif b == '/' and c == 0:
            print("ERROR")
        elif b == '/':
            print(int(a/c))
    else:                           # 其它运算符则为错误
        print("ERROR")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    7-13 日K蜡烛图~15

    股票价格涨跌趋势,常用蜡烛图技术中的K线图来表示,分为按日的日K线、按周的周K线、按月的月K线等。以日K线为例,每天股票价格从开盘到收盘走完一天,对应一根蜡烛小图,要表示四个价格:开盘价格Open(早上刚刚开始开盘买卖成交的第1笔价格)、收盘价格Close(下午收盘时最后一笔成交的价格)、中间的最高价High和最低价Low。

    如果Close<Open,表示为“BW-Solid”(即“实心蓝白蜡烛”);如果Close>Open,表示为“R-Hollow”(即“空心红蜡烛”);如果Open等于Close,则为“R-Cross”(即“十字红蜡烛”)。如果Low比Open和Close低,称为“Lower Shadow”(即“有下影线”),如果High比Open和Close高,称为“Upper Shadow”(即“有上影线”)。请编程序,根据给定的四个价格组合,判断当日的蜡烛是一根什么样的蜡烛。

    输入格式:

    输入在一行中给出4个正实数,分别对应Open、High、Low、Close,其间以空格分隔。

    输出格式:

    在一行中输出日K蜡烛的类型。如果有上、下影线,则在类型后加上with 影线类型。如果两种影线都有,则输出with Lower Shadow and Upper Shadow

    输入样例1:

    5.110 5.250 5.100 5.105
    
    • 1

    输出样例1:

    BW-Solid with Lower Shadow and Upper Shadow
    
    • 1

    输入样例2:

    5.110 5.110 5.110 5.110
    
    • 1

    输出样例2:

    R-Cross
    
    • 1

    输入样例3:

    5.110 5.125 5.112 5.126
    
    • 1

    输出样例3:

    R-Hollow
    
    • 1

    代码长度限制
    16 KB
    时间限制
    400 ms
    内存限制
    64 MB

    题解:

    Open, High, Low, Close = map(float, input().split())
    flag1, flag2 = 0, 0
    if Close<Open:
        ge = 'BW-Solid'
    elif Close>Open:
        ge = 'R-Hollow'
    else:
        ge = 'R-Cross'
    if Low < min(Open, Close):
        a1 = 'Lower Shadow'
        flag1 = 1
    if High > max(Open, Close):
        a2 = 'Upper Shadow'
        flag2 = 1
    if flag1 and flag2:
        print(ge, 'with', a1, 'and', a2)
    elif flag1:
        print(ge, 'with', a1)
    elif flag2:
        print(ge, 'with', a2)
    else:
        print(ge)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    7-14 求整数段和~15

    给定两个整数A和B,输出从A到B的所有整数以及这些数的和。

    输入格式:

    输入在一行中给出2个整数A和B,其中−100≤A≤B≤100,其间以空格分隔

    输出格式:

    首先顺序输出从A到B的所有整数,每5个数字占一行,每个数字占5个字符宽度向右对齐。最后在一行中按Sum = X的格式输出全部数字的和X。

    输入样例:

    -3 8
    
    • 1

    输出样例:

       -3   -2   -1    0    1
        2    3    4    5    6
        7    8
    Sum = 30
    
    • 1
    • 2
    • 3
    • 4

    代码长度限制
    16 KB
    时间限制
    400 ms
    内存限制
    64 MB

    题解:

    A, B = map(int, input().split())    # map()强制将所输入的转换为整型
    sum1 = 0    # 存储所有值的和
    r = 0       # 存储个数
    for i in range(A, B+1):             # 考虑为[A, B]的区间内
        r += 1                          # 个数循环增加
        sum1 += i                       # 随循环值的相加
        print("{:>5d}".format(i), end='')
        if r % 5 == 0 or i == B:        # 5个值换行, 并且循环结束后,再次换行
            print()
    print("Sum = %d" % sum1)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    7-15 计算圆周率~15

    根据下面关系式,求圆周率的值,直到最后一项的值小于给定阈值。

    2
    π
    ​
     =1+ 
    3
    1+ 
    3×5
    2!
    ​
     + 
    3×5×7
    3!
    ​
     ++ 
    3×5×7×⋯×(2n+1)
    n!
    ​
     +
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    输入格式:

    输入在一行中给出小于1的阈值。

    输出格式:

    在一行中输出满足阈值条件的近似圆周率,输出到小数点后6位。

    输入样例:

    0.01
    
    • 1

    输出样例:

    3.132157
    
    • 1

    代码长度限制
    16 KB
    时间限制
    400 ms
    内存限制
    64 MB

    题解:

    f = float(input())
    f_z, f_m = 1, 1
    a, j_g = 1, 1
    sum1 = 0
    while f<j_g:
        f_z *= a
        f_m *= (2*a+1)
        j_g = f_z / f_m
        sum1 += j_g
        a += 1
    s = 2*(1+sum1)
    print("%.6f" % s)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    7-16 求符合给定条件的整数集~15

    给定不超过6的正整数A,考虑从A开始的连续4个数字。请输出所有由它们组成的无重复数字的3位数。

    输入格式:

    输入在一行中给出A。

    输出格式:

    输出满足条件的的3位数,要求从小到大,每行6个整数。整数间以空格分隔,但行末不能有多余空格

    输入样例:

    2
    
    • 1

    输出样例:

    234 235 243 245 253 254
    324 325 342 345 352 354
    423 425 432 435 452 453
    523 524 532 534 542 543
    
    • 1
    • 2
    • 3
    • 4

    代码长度限制
    16 KB
    时间限制
    400 ms
    内存限制
    64 MB

    题解:

    n = int(input())    # 输入起始值
    a = 0               # 存储符合条件的次数
    for i in range(n, n+4):
        for j in range(n, n+4):
            for k in range(n, n+4):
                if i != j and i != k and j != k:    # 3个值不能有重复的
                    a += 1
                    if a < 6:
                        print(str(i*100+j*10+k)+" ", end='')
                    else:
                        a = 0
                        print(str(i*100+j*10+k)+"\n", end='')
     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    7-17 爬动的蠕虫~15

    一条蠕虫长1寸,在一口深为N寸的井的底部。已知蠕虫每1分钟可以向上爬U寸,但必须休息1分钟才能接着往上爬。在休息的过程中,蠕虫又下滑了D寸。就这样,上爬和下滑重复进行。请问,蠕虫需要多长时间才能爬出井?

    这里要求不足1分钟按1分钟计,并且假定只要在某次上爬过程中蠕虫的头部到达了井的顶部,那么蠕虫就完成任务了。初始时,蠕虫是趴在井底的(即高度为0)。

    输入格式:

    输入在一行中顺序给出3个正整数N、U、D,其中D<U,N不超过100。

    输出格式:

    在一行中输出蠕虫爬出井的时间,以分钟为单位。

    输入样例:

    12 3 1
    
    • 1

    输出样例:

    11
    
    • 1

    代码长度限制
    16 KB
    时间限制
    400 ms
    内存限制
    64 MB

    题解:

    N, U, D = map(int, input().split())
    m, s = 0, 0
    while D < U:
        s += U
        m += 1
        if s >= N:
            print(m)
            break
        else:
            s -= D
            m += 1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    7-18 二分法求多项式单根~20

    二分法求函数根的原理为:如果连续函数f(x)在区间[a,b]的两个端点取值异号,即f(a)f(b)<0,则它在这个区间内至少存在1个根r,即f®=0。

    二分法的步骤为:

    检查区间长度,如果小于给定阈值,则停止,输出区间中点(a+b)/2;否则
    如果f(a)f(b)<0,则计算中点的值f((a+b)/2);
    如果f((a+b)/2)正好为0,则(a+b)/2就是要求的根;否则
    如果f((a+b)/2)与f(a)同号,则说明根在区间[(a+b)/2,b],令a=(a+b)/2,重复循环;
    如果f((a+b)/2)与f(b)同号,则说明根在区间[a,(a+b)/2],令b=(a+b)/2,重复循环。
    本题目要求编写程序,计算给定3阶多项式f(x)=a3x3+a2x2+a1x+a0在给定区间[a,b]内的根。

    在给定区间[a,b]内的根。

    输入格式:

    输入在第1行中顺序给出多项式的4个系数a3​​、a2​​、a1、a0,在第2行中顺序给出区间端点a和b。题目保证多项式在给定区间内存在唯一单根。

    输出格式:

    在一行中输出该多项式在该区间内的根,精确到小数点后2位。

    输入样例:

    3 -1 -3 1
    -0.5 0.5
    
    • 1
    • 2

    输出样例:

    0.33
    
    • 1

    代码长度限制
    16 KB
    时间限制
    400 ms
    内存限制
    64 MB

    这个题我也做不了,放在这里,如果有哪位大佬会做的,希望不吝赐教,在此先表示由衷的感谢。


    7-19 支票面额~15

    一个采购员去银行兑换一张y元f分的支票,结果出纳员错给了f元y分。采购员用去了n分之后才发觉有错,于是清点了余额尚有2y元2f分,问该支票面额是多少?

    输入格式:

    输入在一行中给出小于100的正整数n。

    输出格式:

    在一行中按格式y.f输出该支票的原始面额。如果无解,则输出No Solution。

    输入样例1:

    23
    
    • 1

    输出样例1:

    25.51
    
    • 1

    输入样例2:

    22
    
    • 1

    输出样例2:

    No Solution
    
    • 1

    代码长度限制
    16 KB
    时间限制
    400 ms
    内存限制
    64 MB

    题解:

    n = int(input())
    flag = True     # flag作为标记
    for i in range(100):
        for j in range(100):
            if 2*i*100+2*j+n == 100*j+i:
                print(f'{i}.{j}')
                flag = False
    if flag:
        print('No Solution')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    7-20 打印九九口诀表~15

    下面是一个完整的下三角九九口诀表:

    1*1=1   
    1*2=2   2*2=4   
    1*3=3   2*3=6   3*3=9   
    1*4=4   2*4=8   3*4=12  4*4=16  
    1*5=5   2*5=10  3*5=15  4*5=20  5*5=25  
    1*6=6   2*6=12  3*6=18  4*6=24  5*6=30  6*6=36  
    1*7=7   2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49  
    1*8=8   2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64  
    1*9=9   2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81  
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    本题要求对任意给定的一位正整数N,输出从1*1到N*N的部分口诀表。

    输入格式:

    输入在一行中给出一个正整数N(1≤N≤9)。

    输出格式:

    输出下三角N*N部分口诀表,其中等号右边数字占4位左对齐

    输入样例:

    4
    
    • 1

    输出样例:

    1*1=1   
    1*2=2   2*2=4   
    1*3=3   2*3=6   3*3=9   
    1*4=4   2*4=8   3*4=12  4*4=16  
    
    • 1
    • 2
    • 3
    • 4

    代码长度限制
    16 KB
    时间限制
    400 ms
    内存限制
    64 MB

    题解:

    n = int(input())
    for i in range(1, n+1):
        for j in range(1, i+1):
            # 等号右边数字占四位、左对齐(测试点)
            print("{}*{}={:<4d}".format(j, i, i*j), end='')
        print()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    7-21 求特殊方程的正整数解~15

    本题要求对任意给定的正整数N,求方程X
    2
    +Y
    2
    =N的全部正整数解。

    输入格式:
    输入在一行中给出正整数N(≤10000)。

    输出格式:
    输出方程X​2​​+Y​2​​=N的全部正整数解,其中X≤Y。每组解占1行,两数字间以1空格分隔,按X的递增顺序输出。如果没有解,则输出No Solution

    输入样例1:

    884
    
    • 1

    输出样例1:

    10 28
    20 22
    
    • 1
    • 2

    输入样例2:

    11
    
    • 1

    输出样例2:

    No Solution
    
    • 1

    代码长度限制
    16 KB
    时间限制
    400 ms
    内存限制
    64 MB

    题解:

    N = int(input())
    flag = True
    for i in range(100):
        for j in range(100):
            if i**2+j**2==N and i<=j:   # i, j按递增的顺序输出
                print(i, j)
                flag = False
                break
    if flag:
        print("No Solution")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    7-22 龟兔赛跑~20

    乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快?

    输入格式:

    输入在一行中给出比赛时间T(分钟)。

    输出格式:

    在一行中输出比赛的结果:乌龟赢输出@_@,兔子赢输出^_^, 平局则输出-_-;后跟1空格,再输出胜利者跑完的距离。

    输入样例:

    242
    
    • 1

    输出样例:

    @_@ 726
    
    • 1

    代码长度限制
    16 KB
    时间限制
    400 ms
    内存限制
    64 MB

    题解:

    t = int(input())
    wg, tz = 0, 0
    a = 1           # 存储开始跑的时间
    while a <= t:   # 当跑的时间达到比赛时间结束
        wg += 3
        tz += 9
        if a % 10 == 0 and tz > wg:
            if t-a >= 30:
                a += 30
                wg += 90
            else:
                wg += ((t-a)*3)
                a = t
        a += 1      # 循环往复
    if wg < tz:     # 相同时间内,兔子跑的远
        print("^_^", tz)
    elif wg > tz:   # 相同时间内,乌龟跑的远
        print("@_@", wg)
    else:           # 相同时间内,跑的一样远
        print("-_-", wg)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    7-24 约分最简分式~15

    分数可以表示为分子/分母的形式。编写一个程序,要求用户输入一个分数,然后将其约分为最简分式。最简分式是指分子和分母不具有可以约分的成分了。如6/12可以被约分为1/2。当分子大于分母时,不需要表达为整数又分数的形式,即11/8还是11/8;而当分子分母相等时,仍然表达为1/1的分数形式。

    输入格式:

    输入在一行中给出一个分数,分子和分母中间以斜杠/分隔,如:12/34表示34分之12。分子和分母都是正整数(不包含0,如果不清楚正整数的定义的话)。

    提示:

    对于C语言,在scanf的格式字符串中加入/,让scanf来处理这个斜杠。
    对于Python语言,用a,b=map(int, input().split('/'))这样的代码来处理这个斜杠。

    输出格式:

    在一行中输出这个分数对应的最简分式,格式与输入的相同,即采用分子/分母的形式表示分数。如
    5/6表示6分之5。

    输入样例:

    66/120
    
    • 1

    输出样例:

    11/20
    
    • 1

    代码长度限制
    16 KB
    时间限制
    400 ms
    内存限制
    64 MB

    题解:

    # 定义他们的最大公约数,然后将其输入的数除以他们的最大公约数,便是约分后的数啦
    def gcd(a, b):
        if a == 0 or b == 0:
            print("invalid input")
            return -1
        elif a>=b:
            return b if a%b == 0 else gcd(b, a%b)
        else:
            return a if b%a == 0 else gcd(a, b%a)
    
    
    A, B = map(int, input().split('/'))
    div = gcd(A, B)
    a = A//div
    b = B//div
    print(str(a)+'/'+str(b))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    7-25 念数字~15

    输入一个整数,输出每个数字对应的拼音。当整数为负数时,先输出fu字。十个数字对应的拼音如下:

    0: ling
    1: yi
    2: er
    3: san
    4: si
    5: wu
    6: liu
    7: qi
    8: ba
    9: jiu
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    输入格式:

    输入在一行中给出一个整数,如:1234。

    提示:整数包括负数、零和正数。

    输出格式:

    在一行中输出这个整数对应的拼音,每个数字的拼音之间用空格分开,行末没有最后的空格。如
    yi er san si。

    输入样例:

    -600
    
    • 1

    输出样例:

    fu liu ling ling
    
    • 1

    代码长度限制
    16 KB
    时间限制
    400 ms
    内存限制
    64 MB

    题解:

    s = {'0':'ling', '1':'yi', '2':'er', '3':'san', '4':'si', '5':'wu', '6':'liu',
         '7':'qi', '8':'ba', '9':'jiu', '-':'fu'}
    n = input()
    for i in n[:-1]:
        print(s[i], end=' ')
    print(s[n[-1]])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    7-26 单词长度~15

    你的程序要读入一行文本,其中以空格分隔为若干个单词,以.结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如it’s算一个单词,长度为4。注意,行中可能出现连续的空格;最后的.不计算在内。

    输入格式:

    输入在一行中给出一行文本,以.结束

    提示:用scanf(“%c”,…);来读入一个字符,直到读到.为止。

    输出格式:

    在一行中输出这行文本对应的单词的长度,每个长度之间以空格隔开,行末没有最后的空格。

    输入样例:

    It's great to see you here.
    
    • 1

    输出样例:

    4 5 2 3 3 4
    
    • 1

    代码长度限制
    16 KB
    时间限制
    400 ms
    内存限制
    64 MB

    题解:

    s = list(input().strip('.').split())    # 去掉英语句号.并且转为列表的形式
    for i in range(len(s)): 
        if i != len(s)-1:
            print("{} ".format(len(s[i])), end='')
        else:
            print(len(s[i]), end='')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    7-27 冒泡法排序~20

    将N个整数按从小到大排序的冒泡排序法是这样工作的:从头到尾比较相邻两个元素,如果前面的元素大于其紧随的后面元素,则交换它们。通过一遍扫描,则最后一个元素必定是最大的元素。然后用同样的方法对前N−1个元素进行第二遍扫描。依此类推,最后只需处理两个元素,就完成了对N个数的排序。

    本题要求对任意给定的K(<N),输出扫描完第K遍后的中间结果数列。

    输入格式:

    输入在第1行中给出N和K(1≤K<N≤100),在第2行中给出N个待排序的整数,数字间以空格分隔。

    输出格式:

    在一行中输出冒泡排序法扫描完第K遍后的中间结果数列,数字间以空格分隔,但末尾不得有多余空格。

    输入样例:

    6 2
    2 3 5 1 6 4
    
    • 1
    • 2

    输出样例:

    2 1 3 4 5 6
    
    • 1

    代码长度限制
    16 KB
    时间限制
    400 ms
    内存限制
    64 MB

    题解:

    a, b = map(eval, input().split())       # map()强制将所输入的都去掉字符
    ns = list(map(eval, input().split()))   # 同上,只是多了一步,即生成列表
    last = a - 1                            # 最后一个下标为总的个数减1
    
    for i in range(b):
        for j in range(last):
            if ns[j] > ns[j+1]:
                temp = ns[j+1]
                ns[j+1] = ns[j]
                ns[j] = temp                # 找出最大一个数放在最后
        last -= 1                           # 注意不能少写这个,否则扫描的次数就不对
    
    for i in range(a-1):
        print(ns[i], end=' ')
    print(ns[a-1])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    7-28 猴子选大王~20

    一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?

    输入格式:

    输入在一行中给一个正整数N(≤1000)。

    输出格式:

    在一行中输出当选猴王的编号。

    输入样例:

    11
    
    • 1

    输出样例:

    7
    
    • 1

    代码长度限制
    16 KB
    时间限制
    400 ms
    内存限制
    64 MB

    n = int(input())
    monkey = []
    ts, c = 0, 0			# 存储两个变量,分别是每次被淘汰和有机会被选中的
    if n > 0 and n <= 1000:     # 这一句可以不用的
        for i in range(1, n+1):
            monkey.append(i)	# 将符合条件的追加到空列表mokey中
        while len(monkey) > 1:	# 当列表长度超过1时
            ts += 1
            c += 1
            if c > len(monkey):
                c = 1
            if ts == 3:
                ts = 0
                monkey.pop(c - 1)	# 每每淘汰一次
                c -= 1				# 知道最后只剩下一个
        print(monkey[0])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    7-29 删除字符串中的子串~20

    输入2个字符串S1和S2,要求删除字符串S1中出现的所有子串S2,即结果字符串中不能包含S2。

    输入格式:

    输入在2行中分别给出不超过80个字符长度的、以回车结束的2个非空字符串,对应S1和S2。

    输出格式:

    在一行中输出删除字符串S1中出现的所有子串S2后的结果字符串。

    输入样例:

    Tomcat is a male ccatat
    cat
    
    • 1
    • 2

    输出样例:

    Tom is a male 
    
    • 1

    代码长度限制
    16 KB
    时间限制
    400 ms
    内存限制
    64 MB

    题解:

    s1 = input()
    s2 = input()
    flag = 1
    while flag:            # 若无子字符串在内则跳出循环
        flag = 0
        if s2 in s1:
            s1 = s1.replace(s2, '')
            flag = 1        # 起标记作用
    print(s1)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    7-30 字符串的冒泡排序~20

    我们已经知道了将N个整数按从小到大排序的冒泡排序法。本题要求将此方法用于字符串序列,并对任意给定的K(<N),输出扫描完第K遍后的中间结果序列。

    输入格式:

    输入在第1行中给出N和K(1≤K<N≤100),此后N行,每行包含一个长度不超过10的、仅由小写英文字母组成的非空字符串。

    输出格式:

    输出冒泡排序法扫描完第K遍后的中间结果序列,每行包含一个字符串。

    输入样例:

    6 2
    best
    cat
    east
    a
    free
    day
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    输出样例:

    best
    a
    cat
    day
    east
    free
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    代码长度限制
    16 KB
    时间限制
    400 ms
    内存限制
    64 MB

    题解:

    n, k = map(int, input().split())    # map()强制将所输入的所有数分别转化为整型
    s = []                              # 存储空列表
    for i in range(n):                  # 输出n行
        s.append(input())
    for i in range(k):                  # 扫描几次(依题意)
        for j in range(n-i-1):
            if s[j] > s[j+1]:
                item = s[j]
                s[j] = s[j+1]
                s[j+1] = item           # 根据扫描次数一次次把最大的数放到最后
    for i in range(n):
        print(s[i])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    7-31 字符串循环左移~20

    输入一个字符串和一个非负整数N,要求将字符串循环左移N次。

    输入格式:

    输入在第1行中给出一个不超过100个字符长度的、以回车结束的非空字符串;第2行给出非负整数N。

    输出格式:

    在一行中输出循环左移N次后的字符串。

    输入样例:

    Hello World!
    2
    
    • 1
    • 2

    输出样例:

    llo World!He
    
    • 1

    代码长度限制
    16 KB
    时间限制
    400 ms
    内存限制
    64 MB

    题解:

    s = str(input())
    n = int(input())
    if n>len(s):        # 如果超过了,减超过的部分
        n -= len(s)
    s = s[n:]+s[:n]
    print(s)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    7-32 说反话-加强版~20

    给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

    输入格式:

    测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用若干个空格分开。

    输出格式:

    每个测试用例的输出占一行,输出倒序后的句子,并且保证单词间只有1个空格。

    输入样例:

    Hello World   Here I Come
    
    • 1

    输出样例:

    Come I Here World Hello
    
    • 1

    感谢杭州电子科技大学李卫明老师修正数据! 感谢浙江工业大学之江学院石洗凡老师修正测试点提示。

    代码长度限制
    16 KB
    时间限制
    300 ms
    内存限制
    64 MB

    题解:

    try:
        s = list(input().split())
        for i in s[:-len(s):-1]:    # 从后往前遍历
            print(i+" ", end='')
        print(s[0])
    except IndexError:
        exit(0)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    7-33 有理数加法~15

    本题要求编写程序,计算两个有理数的和。

    输入格式:
    输入在一行中按照a1/b1 a2/b2的格式给出两个分数形式的有理数,其中分子和分母全是整形范围内的正整数。

    输出格式:
    在一行中按照a/b的格式输出两个有理数的和。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。

    输入样例1:

    1/3 1/6
    
    • 1

    输出样例1:

    1/2
    
    • 1

    输入样例2:

    4/3 2/3
    
    • 1

    输出样例2:

    2
    
    • 1

    代码长度限制
    16 KB
    时间限制
    400 ms
    内存限制
    64 MB

    题解:

    s, q = input().split()
    a, b = s.split("/")     # split('/')表示a, b以/隔开
    c, d = q.split("/")
    a, b, c, d = int(a), int(b), int(c), int(d)
    if b == d:
        a += c
    else:
        k = b
        b *= d
        a = a * d + c * k
    for i in range(2, a):
        while a%i == 0 and b%i == 0:
            a //= i
            b //= i
    if b == 1:
        s = a
    else:
        s = str(a)+"/"+str(b)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    7-34 通讯录的录入与显示~10

    通讯录中的一条记录包含下述基本信息:朋友的姓名、出生日期、性别、固定电话号码、移动电话号码。
    本题要求编写程序,录入N条记录,并且根据要求显示任意某条记录。

    输入格式:
    输入在第一行给出正整数N(≤10);随后N行,每行按照格式姓名 生日 性别 固话 手机给出一条记录。其中姓名是不超过10个字符、不包含空格的非空字符串;生日按yyyy/mm/dd的格式给出年月日;性别用M表示“男”、F表示“女”;固话和手机均为不超过15位的连续数字,前面有可能出现+。

    在通讯录记录输入完成后,最后一行给出正整数K,并且随后给出K个整数,表示要查询的记录编号(从0到N−1顺序编号)。数字间以空格分隔。

    输出格式:
    对每一条要查询的记录编号,在一行中按照姓名 固话 手机 性别 生日的格式输出该记录。若要查询的记录不存在,则输出Not Found。

    输入样例:

    3
    Chris 1984/03/10 F +86181779452 13707010007
    LaoLao 1967/11/30 F 057187951100 +8618618623333
    QiaoLin 1980/01/01 M 84172333 10086
    2 1 7
    
    • 1
    • 2
    • 3
    • 4
    • 5

    输出样例:

    LaoLao 057187951100 +8618618623333 F 1967/11/30
    Not Found
    
    • 1
    • 2

    代码长度限制
    16 KB
    时间限制
    400 ms
    内存限制
    64 MB

    题解:

    n = eval(input())       # 将输入的值去掉字符
    le = []
    a = []
    for i in range(n):
        t = input().split()
        le.append(t)
    for le1 in le:
        tmp = le1[1]        # 存储一个值,便于交换后面的变量
        le1[1] = le1[3]
        le1[3] = le1[2]
        le1[2] = le1[4]
        le1[4] = tmp
    # print(le1)
    sy = tuple(map(eval, input().split()))
    for i in range(sy[0]):
        d = sy[i+1]
        # print(d)
        if 0 <= d < n:
            a = le[d]
            # print(a)
            print(a[0], a[1], a[2], a[3], a[4])
        else:
            print("Not Found")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    7-35 有理数均值~20

    本题要求编写程序,计算N个有理数的平均值。

    输入格式:

    输入第一行给出正整数N(≤100);第二行中按照a1/b1 a2/b2 …的格式给出N个分数形式的有理数,其中分子和分母全是整形范围内的整数;如果是负数,则负号一定出现在最前面。

    输出格式:

    在一行中按照a/b的格式输出N个有理数的平均值。注意必须是该有理数的最简分数形式,若分母为1,则只输出分子。

    输入样例1:

    4
    1/2 1/6 3/6 -5/10
    
    • 1
    • 2

    输出样例1:

    1/6
    
    • 1

    输入样例2:

    2
    4/3 2/3
    
    • 1
    • 2

    输出样例2:

    1
    
    • 1

    代码长度限制
    16 KB
    时间限制
    400 ms
    内存限制
    64 MB

    题解:

    from fractions import Fraction
    n = int(input())
    lst = map(Fraction, input().split())
    print(sum(lst)/n)
    
    • 1
    • 2
    • 3
    • 4

    7-36 复数四则运算~15

    本题要求编写程序,计算2个复数的和、差、积、商。

    输入格式:

    输入在一行中按照a1 b1 a2 b2的格式给出2个复数C1=a1+b1iC2=a2+b2i的实部和虚部。题目保证C2不为0。

    输出格式:

    分别在4行中按照(a1+b1i) 运算符 (a2+b2i) = 结果的格式顺序输出2个复数的和、差、积、商,数字精确到小数点后1位。如果结果的实部或者虚部为0,则不输出。如果结果为0,则输出0.0。

    输入样例1:

    2 3.08 -2.04 5.06
    
    • 1

    输出样例1:

    (2.0+3.1i) + (-2.0+5.1i) = 8.1i
    (2.0+3.1i) - (-2.0+5.1i) = 4.0-2.0i
    (2.0+3.1i) * (-2.0+5.1i) = -19.7+3.8i
    (2.0+3.1i) / (-2.0+5.1i) = 0.4-0.6i
    
    • 1
    • 2
    • 3
    • 4

    输入样例2:

    1 1 -1 -1.01
    
    • 1

    输出样例2:

    (1.0+1.0i) + (-1.0-1.0i) = 0.0
    (1.0+1.0i) - (-1.0-1.0i) = 2.0+2.0i
    (1.0+1.0i) * (-1.0-1.0i) = -2.0i
    (1.0+1.0i) / (-1.0-1.0i) = -1.0
    
    • 1
    • 2
    • 3
    • 4

    代码长度限制
    16 KB
    时间限制
    400 ms
    内存限制
    64 MB

    题解:

    这个题运行结果都是对的,但不知道为什么,测试出来还是零分,不知道哪儿出啦问题,还是没找出来,如果有找到这个错误在哪儿的话,还请指点下。

    a1, b1, a2, b2 = map(float, input().split())
    a, b = complex(a1, b1), complex(a2, b2)
    x1, x2, y1, y2 = round(a.real, 1), round(a.imag, 1), round(a.real, 1), round(a.imag, 1)
    if x2 >= 0:
        x2 = '+' + '' + str(x2)
    if y2 >= 0:
        y2 = '+' + '' + str(y2)
    
    def cal(a, b, ope):
        if ope == '+':
            c = a + b
            return c
        if ope == '-':
            c = a - b
            return c
        if ope == '*':
            c = a * b
            return c
        if ope == '/':
            c = a / b
            return c
    
    def func(c):
        c1, c2 = round(c.real, 1), round(c.imag, 1)
        if c1 == 0 and c2 == 0:
            print('0.0')
        elif c1 == 0:
            print(f'{c2}i')
        elif c2 == 0:
            print(c1)
        else:
            if c2 > 0:
                print(f'{c1}+{c2}i')
            else:
                print(f'{c1}{c2}i')
    
    print(f'({x1}{x2}i) + ({y1}{y2}i) = ', end='')
    func(cal(a, b, '+'))
    print(f'({x1}{x2}i) - ({y1}{y2}i) = ', end='')
    func(cal(a, b, '-'))
    print(f'({x1}{x2}i) * ({y1}{y2}i) = ', end='')
    func(cal(a, b, '*'))
    print(f'({x1}{x2}i) / ({y1}{y2}i) = ', end='')
    func(cal(a, b, '/'))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44

    7-37 整数分解为若干项之和~20

    将一个正整数N分解成几个正整数相加,可以有多种分解方法,例如7=6+1,7=5+2,7=5+1+1,…。编程求出正整数N的所有整数分解式子。

    输入格式:
    每个输入包含一个测试用例,即正整数N (0<N≤30)。

    输出格式:
    按递增顺序输出N的所有整数分解式子。递增顺序是指:对于两个分解序列N​​ ={n​1​​,n2,⋯}和N2={m1,m​2,⋯},若存在i使得n1=m1,⋯,ni=mi,但是ni+1 <mi+1,则N1序列必定在N2 序列之前输出。每个式子由小到大相加,式子间用分号隔开,且每输出4个式子后换行。

    输入样例:

    7
    
    • 1

    输出样例:

    7=1+1+1+1+1+1+1;7=1+1+1+1+1+2;7=1+1+1+1+3;7=1+1+1+2+2
    7=1+1+1+4;7=1+1+2+3;7=1+1+5;7=1+2+2+2
    7=1+2+4;7=1+3+3;7=1+6;7=2+2+3
    7=2+5;7=3+4;7=7
    
    • 1
    • 2
    • 3
    • 4

    代码长度限制
    16 KB
    时间限制
    800 ms
    内存限制
    64 MB

    题解:

    def main():
        n = int(input())
        f(n, 1, str(n) + '=')
    
    
    count = 0
    
    def f(n, s_num, out=''):
        global count
        for i in range(s_num, n // 2 + 1):
            op = out
            op += str(i) + '+'
            f(n - i, i, op)
    
        if n == s_num:
            print(out + str(n), end='')
            count += 1
            if (count % 4) == 0:
                print()
            elif '+' in out:
                print(';', end='')
            return
    
        f(n, n, out)
    
    
    main()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    7-38 数列求和-加强版~20

    给定某数字A(1≤A≤9)以及非负整数N(0≤N≤100000),求数列之和S=A+AA+AAA+⋯+AA⋯A(N个A)。例如A=1, N=3时,S=1+11+111=123。

    输入格式:

    输入数字A与非负整数N。

    输出格式:

    输出其N项数列之和S的值。

    输入样例:

    1 3
    
    • 1

    输出样例:

    123
    
    • 1

    代码长度限制
    16 KB
    时间限制
    200 ms
    内存限制
    64 MB

    题解:

    a, n = map(int, input().split())    # map强制转换为整型
    add = 0
    l = [0]*100000
    # print(l)
    if n == 0:                          # 特殊情况,无论多少个0相加,还是0
        print("0")
    for i in range(n, 0, -1):           # n从后往前遍历
        add = (i*a+add)//10
        l[i-1] = add
    if add != 0:
        print(add, end='')
    for i in range(1, n+1):
        if n == i:
            print((i*a) % 10, end='')
        else:
            print((i*a+l[i]) % 10, end='')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

  • 相关阅读:
    cka练习
    西门子200程序案例集
    多线程 - 定时器
    MQ相关介绍
    2024年大语言模型的微调
    谈谈分布式事务原理
    JSP注释方式演示 讲解显式与隐式注释
    使用postman做接口测试
    两独立样本率的非劣效性试验-样本量计算
    sysbench--生产--02--mycat和mysql的性能
  • 原文地址:https://blog.csdn.net/m0_66318554/article/details/124716182