一群猴子要选新猴王。新猴王的选择方法是:让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[:]的区别
简而言之:第一种相当于会在列表继续追加,导致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字符左对齐的意思
第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中关于矩阵的题目的熟悉
本星期情况: