2021-04-26

求矩阵鞍点的个数
一个矩阵元素的“鞍点”是指该位置上的元素值在该行上最大、在该列上最小。

本题要求编写程序,求一个给定的n阶方阵的鞍点。

输入格式:
输入第一行给出一个正整数n(1≤n≤6)。随后n行,每行给出n个整数,其间以空格分隔。

输出格式:
鞍点的个数

输入样例1:
4  
1 7 4 1   
4 8 3 6
1 6 1 2
0 7 8 9
1
2
3
4
5
输出样例1:
1
1
输入样例2:
2
1 7
4 1
1
2
3
输出样例2:
0
1
输入样例3:
3
6    6    6
6    6    6
6    6    6
1
2
3
4
输出样例3:
9
1
本来这道题没什么的,但是犯了一个很简单的错误,缩进改错了,导致一直没输出正确结果,花费了一个半小时找出来一个缩进的错误,错误代码如下:

n = int(input())
a = []
count = 0
t = -1
flag = 0
for i in range(n):
    s = input()
    a.append([int(n) for n in s.split()])
for y in range(n):
    t = -1
    for j in range(n):
        if a[y][j] >= t:
            t = a[y][j]
    for k in range(n):
        if a[y][k] == t:
            for x in range(n):
                if t <= a[x][k]:
                    flag += 1
            if flag == n:
                count += 1
                flag = 0
print(count)

正确代码:

n = int(input())
a = []
count = 0
t = -1
flag = 0
for i in range(n):
    s = input()
    a.append([int(n) for n in s.split()])
for y in range(n):
    t = -1
    for j in range(n):
        if a[y][j] >= t:
            t = a[y][j]
    for k in range(n):
        if a[y][k] == t:
            for x in range(n):
                if t <= a[x][k]:
                    flag += 1
            if flag == n:
                count += 1
            flag = 0
print(count)

是的没错!就是倒数第二行的缩进没在if外面导致输出结果一直错误。。。

 

 

字典合并。输入用字符串表示两个字典,输出合并后的字典,字典的键用一个字母或数字表示。注意:1和‘1’是不同的关键字!

输入格式:

在第一行中输入第一个字典字符串 在第二行中输入第二个字典字符串

输出格式:

在一行中输出合并的字典,输出按字典序。"1"的ASCII吗为49,大于1,排序时1在前,"1"在后,其它的也一样。

输入样例1:

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

{1:3,2:5}
{1:5,3:7} 

输出样例1:

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

{1:8,2:5,3:7}

输入样例2:

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

{"1":3,1:4}
{"a":5,"1":6}

输出样例2:

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

{1:4,"1":9,"a":5}

 

参考代码:

a = dict(eval(input()))
b = dict(eval(input()))
for i in b:
    if i not in a:
        a[i] = b[i]
    else:
        a[i] += b[i]
print("{",end="")
s1 = [i for i in a.keys() if type(i) == type(1)]
s2 = [i for i in a.keys() if type(i) == type('a')]
s1.sort()
s2.sort()
c = 0
n = len(a)
for i in s1 + s2:
    c += 1
    if type(i)==type(1):
        print("%d:%d"%(i,a[i]),end="")
    else:
        print('"%s":%d'%(i,a[i]),end="")
    if c!=n:
        print(',',end="")
print("}")

用到了type函数,其中type的具体函数实现如下:

type()用于获取数据类型

实操如图:

 

通过第82题学习了index的用法:

1、index() 的简单用法:

>>> I = ['东北大鹌鹑','周淑怡','刘某人','胡歌']
>>> print(I.index('胡歌'))
3

详情见index()和dict()的用法:
原文链接:https://blog.csdn.net/qq_45504119/article/details/104701661

 

第82题最后算法需要捋顺一下:

输入样例:

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

到最后应引入额外一个数组,以方便解题的继续:

其中的思路应该借鉴

for i in range(int(N / 2)):
    if peo[i] in f:
        j = f.index(peo[i])
        print(peo[i] + ' ' + m[-j - 1])
    else:
        j = m.index(peo[i])
        print(m[j] + ' ' + f[-j - 1])

 

 

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

输入格式:

在一行中输入列表或元组

输出格式:

在一行中输出数字的和

输入样例:

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

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

输出样例:

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

99

学习新思路:

s=input()
sum=0
t=""
flag=0
s=s.replace(',',' ')
s=s.replace('[',' ')
s=s.replace(']',' ')
s=s.replace('(',' ')
s=s.replace(')',' ')
for i in s:
    if(i=='"'):
        flag=flag+1
    if(flag%2==0 and i!='"'):
        t=t+i
t=t.split()
for i in range(0,len(t)):
    sum=sum+int(t[i])
print(sum)

 其中用for循环和flag判断值得借鉴,判断如果为字符则不参与计算!

输入一个嵌套列表,嵌套层次不限,根据层次,求列表元素的加权和。第一层每个元素 的值为:元素值*1,第二层每个元素的值为:元素值*2,第三层每个元素的值为:元素值*3, ...,以此类推!

输入格式:

在一行中输入列表

输出格式:

在一行中输出加权和

输入样例:

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

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

输出样例:

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

72

本题目自己写的代码:

s = input()
b = 0
sum = 0
s = s.replace(',','')
for i in s:
    if i == '[':
        b += 1
    elif i == ']':
        b -= 1
    else:
        i = int(i)
        sum += i*b
print(sum)

答案正确,但是挺多的测试点没过

正确代码:

a = input()
n = 0
ans = 0
res = a
a = a.replace('[', '')
a = a.replace(']', '')
nums = a.split(',')
b = res
j = 0
for i in range(len(b)):
    if b[i] == '[':
        n += 1
    elif b[i] == ']':
        n -= 1
    elif b[i] == ',':
        continue
    elif b[i+1] == ',' or b[i+1] == ']':
        ans += int(nums[j]) * n
        j += 1
print(ans)

 他是使用栈的方法得以实现,一开始不知道错在哪里,后来想到可能有一个原因就是如果数列里边有二位数及以上的多位数,比如11,按我上面的方法会变成两个1,从而达不到预期效果,只是因为测试的样例刚好都是个位数才勉强通过了第一个测试点,还是要仔细审题

 

 

输出全排列一题运用了寒假写过的一道题的思想:递归

 

最后一题基本不会,查csdn发现运用了很多库函数,re,sys还有collections,加深了对python库强大功能的认知

 

 

 

本周完成情况:

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值