2021-04-13

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

输入格式:

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

输出格式:

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

输入样例:

11

输出样例:

7

 

n=int(input())
ls=[i for i in range(1, n+1)]
c=0
while len(ls)>1:
    for i in ls[:]:#虽然经过remove(), 但遍历还是保持原列表,不能用ls
        c=c+1
        if c==3:
            c=0
            ls.remove(i)
print(ls[0])

其中收货一个很重要的点:

虽然经过remove(), 但遍历还是保持原列表,不能用ls,应该使用ls[:]

其中学到了list[]和list[:]的区别

可以参考CSDN中:https://blog.csdn.net/weixin_39776217/article/details/105136305?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161832836316780357272027%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=161832836316780357272027&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v2~rank_v29-3-105136305.nonecase&utm_term=for+i+in+%5B%3A%5D&spm=1018.2226.3001.4450

 

简而言之:第一种相当于会在列表继续追加,导致for循环爆栈,第二种首先会提出所有元素。

 

通过第58、59题目输入矩阵的方法:(以下代码)

for i in range(m):
    s = input()
    a.append([int(n) for n in s.split(" ")])

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

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

输入格式:

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

输出格式:

输出在一行中按照“行下标 列下标”(下标从0开始)的格式输出鞍点的位置。如果鞍点不存在,则输出“NONE”。题目保证给出的矩阵至多存在一个鞍点。

输入样例1:

4
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9

输出样例1:

2 1

输入样例2:

2
1 7
4 1

输出样例2:

NONE

 

代码:

n=int(input());a=[];count=0;count1=0
for i in range(n):
    s=input()
    a.append([int(n) for n in s.split()])
for j in range(n):
    if count1 == n and count == n:
        break
    for k in range(n):
        for k1 in range(n):
            if a[j][k]>=a[j][k1]:
                count+=1
        if count==n:
            for j1 in range(n):
                if a[j][k]<=a[j1][k]:
                    count1+=1
            if count1==n:
                print("{} {}".format(j,k))
                break
        count1=0;count=0
if count1!=n and count!=n:
    print("NONE")

其中只存在一个鞍点,所以找到一个可以通过break来退出循环,降低查找所需时间

 

通过第62题巩固了print的对齐方法,%d为占一个字符的意思,%4d为占一个字符且右对齐的意思,%06为占用6个字符前面不足用0替代的意思,%-4d为占4字符左对齐的意思

详情见:https://blog.csdn.net/weixin_39639040/article/details/110773713?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161844897516780366582850%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=161844897516780366582850&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_v2~rank_v29-6-110773713.pc_search_result_hbase_insert&utm_term=python%E5%B7%A6%E5%AF%B9%E9%BD%90&spm=1018.2226.3001.4187

 

 

第65题

 

求一个3*3二维数组中每行的最大值和每行的和。

输入格式:

在一行中输入9个小于100的整数,其间各以一个空格间隔

输出格式:

输出3行3列的二维数组,并在每行后面分别输出每行最大值和每行元素的和,每个数据输出占4列。

输入样例:

3 6 5 9 8 2 1 4 5

输出样例:

   3   6   5   6  14
   9   8   2   9  19
   1   4   5   5  10

 

别人使用的代码:

n=int(input())
cnt=65
for i in range(1,n+1):
    for j in range(1,n-i+2):
        print('{:c} '.format(cnt),end="")
        cnt=cnt+1
    print("")

我的代码:

s = input()
a = []
t = 0
sum = 0
b = []
b.append([int(n) for n in s.split(" ")])
j = 0
for i in range(3):
    a.append([b[0][j],b[0][j+1],b[0][j+2]])
    j += 3

for i in range(3):
    for j in range(3):
        if a[i][j] > t:
            t = a[i][j]
        sum += a[i][j]
        print("%4d"%(a[i][j]),end="")
    print("%4d%4d"%(t,sum))
    t = 0
    sum = 0

其中未能很好地理解python中的二维数组,应该进一步简化代码,简化的部分代码转变:

for i in range(3):
    a.append([b[j],b[j+1],b[j+2]])
    j += 3

for i in range(3):
    for j in range(3):
        if a[i][j] > t:
            t = a[i][j]
        sum += a[i][j]
        print("%4d"%(a[i][j]),end="")
    print("%4d%4d"%(t,sum))
    t = 0
    sum = 0

这星期做的题主要对python中关于矩阵的题目的熟悉

 

本星期情况:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值