7-1 sdut-求全排列

分数 10

作者 周雪芹

单位 山东理工大学

输入整数n(3<=n<=7),编写程序输出1,2,...,n整数的全排列,按从小到大的顺序输出。

提示:求全排列的过程定义为一个函数,输入参数为包含n个元素的列表,返回值为包含全排列的列表。

输入格式:

在一行内,输入正整数n。

输出格式:

按数值从小到大的顺序输出1到n的全排列。每种排列占一行,数字间无空格。

输入样例:

3

输出样例:

123

132

213

231

312

321

实现代码:

from itertools import permutations

n=int(input())
for s in permutations(range(1,1+n)):
    for i in str(s):
        if i.isdigit():
            print(i,end="")
    print()

7-3 sdut-列表数字元素加权和(2)

分数 10

作者 周雪芹

单位 山东理工大学

输入一个嵌套列表,嵌套层次不限,根据层次,求列表元素的加权和。

第一层每个元素 的值为:元素值*1,第二层每个元素的值为:元素值*2,第三层每个元素的值为:元素值*3, ...,以此类推!

输入格式:

在一行中输入列表。

输出格式:

在一行中输出元素加权之和。

输入样例:

[1,2,[3,4,[5,6],7],8]

输出样例:

72

 实现代码:

def fun(l,d):
    sum = 0
    for i in l:
        if isinstance(i,int):
            sum+=i*d
        elif isinstance(i,list):
            sum+=fun(i,d+1)
    return sum

l=eval(input())
d=1
print(fun(l,d))

7-4 sdut-列表或元组的数字元素求和(yeild)

分数 10

作者 周雪芹

单位 山东理工大学

求列表中数字和,列表中嵌套层次不限。

输入格式:

在一行中输入列表或元组。

输出格式:

在一行中输出数字的和。

输入样例:

[11,2,[3,7],(68,-1),"123",9]

输出样例:

99

 实现代码:

def fun(l):
    sum=0
    for i in l:
        if isinstance(i,int):
            sum+=i
        elif isinstance(i,list):
            sum+=fun(i)
        elif isinstance(i,tuple):
            sum+=fun(i)
    return sum

l=eval(input())
print(fun(l))

7-6 sdut-学生互助组队

分数 10

作者 周雪芹

单位 山东理工大学

“一对一学习互助小组”是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组。

请你编写程序帮助老师完成这个分配工作,即:在得到全班学生的排名后,在当前尚未分组的学生中,将名次最靠前的学生与名次最靠后的异性学生分为一组。

输入格式:

第一行给出正偶数N(≤50),即全班学生的人数。

此后N行,按照名次从高到低的顺序给出每个学生的性别(0代表女生,1代表男生)和姓名(不超过8个英文字母的非空字符串),以1个空格分隔。

这里保证本班男女比例是1:1,并且没有并列名次。

输出格式:

每行输出一组两个学生的姓名,其间以1个空格分隔。

名次高的学生在前,名次低的学生在后。

小组的输出顺序按照前面学生的名次从高到低排列。

输入样例:

8

0 Amy

1 Tom

1 Bill

0 Cindy

0 Maya

1 John

1 Jack

0 Linda

输出样例:

Amy Jack

Tom Linda

Bill Maya

Cindy John

 实现代码:

n=int(input())
t=n//2
l=[]
l0=[]
l1=[]
while n:
    n-=1
    x,y=map(str,input().split())
    l.append(y)
    x=int(x)
    if x==0:
        l0.append(y)
    else:
        l1.append(y)
a=b=0
for i in range(t):
    if l[i] in l0:
        print(l[i],l1[t-1-a])
        a+=1
    else:
        print(l[i], l0[t-1 - b])
        b += 1

7-7 sdut-求指定层的元素个数

分数 10

作者 周雪芹

单位 山东理工大学

输入一个嵌套列表,再输入层数,求该层的元素个数。

输入格式:

第一行输入列表,第二行输入层数。

输出格式:

在一行中输出元素个数。

输入样例:

[1,2,[3,4,[5,6],7],8]

3

输出样例:

2

 实现代码:

def fun(l,n,d):
    sum=0
    if n==d:
        return len(l)
    else:
        for i in l:
            if isinstance(i,list):
                sum+=fun(i,n,d+1)
        return sum

l=eval(input())
n=int(input())
d=1
print(fun(l,n,d))

7-6 sdut-oop-8 分数四则运算

分数 10

作者 周雪芹

单位 山东理工大学

定义类Fraction,在其中定义属性:numerator和denominator,分别表示分子和分母。

然定再定义两个分数的加、减、乘、除运算的方法。

在主类中输入2个分数,计算它们的四则运算结果。

提示:若用Python语言来实现,不必自行创建类,可直接使用 fractions模块处理分数的表示与运算。

输入格式:

第一行是整数N,表示待进行分数四则运算式子的数量。接下来包含N行输入。

每行数据是一个字符串,格式是"a/boc/d"。

其中a, b, c, d为数字(每个数字保证在int类型范围内,为正数并且不存在正号)。o是运算符"+"或者"-","*",""。

输出格式:

对于每一行分数四则运算,输出一行计算结果。

注意:结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数形式。

输入样例:

5

1/100+3/100

1/4-1/2

1/3-1/3

1/2*2/1

1/2\1/2

输出样例:

1/25

-1/4

0

1

1

 实现代码:

from fractions import Fraction

n=int(input())
while n:
    n-=1
    s=input()
    if '+' in s:
        x,y=s.split('+')
        print(Fraction(x)+Fraction(y))
    elif '-' in s:
        x, y =s.split('-')
        print(Fraction(x) - Fraction(y))
    elif '*' in s:
        x, y = s.split('*')
        print(Fraction(x) * Fraction(y))
    elif '\\' in s:
        x, y = s.split('\\')
        print(Fraction(x) / Fraction(y))

7-7 sdut-分数加减法

分数 10

作者 周雪芹

单位 山东理工大学

编写一个程序,实现两个分数的加减法。

输入格式:

输入包含多行数据。

每行数据是一个字符串,格式是"a/boc/d"。

其中a, b, c, d是一个0-9的整数。o是运算符"+"或者"-"。

输出格式:

对于输入数据的每一行输出两个分数的运算结果。

注意:结果应符合书写习惯,没有多余的符号、分子、分母,并且化简至最简分数。

输入样例:

在这里给出一组输入。例如:

1/8+3/8

1/4-1/2

1/3-1/3

输出样例:

在这里给出相应的输出。例如:

1/2

-1/4

0

 实现代码:

from fractions import Fraction

while True:
    try:
        s=input()
        if '+' in s:
            x,y=s.split('+')
            print(Fraction(x)+Fraction(y))
        else:
            x, y = s.split('-')
            print(Fraction(x) - Fraction(y))
    except:
        break

更多推荐