小希子 发表于 2022-4-28 16:06:15

22课的课后作业不懂

x =
x2 = x[:]
j = x
count = 0
for i in x:
    if count == 0:
      j = i
    if i == j:
      count += 1
    else:
      count -= 1

if x.count(j) > len(x) / 3:
    print('主要元素为:',j)
else:
    print('没有主要元素')


while x2.count(j):
    x2.remove(j)
w = x2
for u in x2:
    if count == 0:
      w = u
    if u == w:
      count += 1
    else:
      count -= 1

if x2.count(w) > len(x) / 3:
    print('主要元素为:',w)
else:
    print('没有主要元素')

上面是我写的,第一个主要元素出现之后,在拷贝列表中将第一个主要元素删除,然后再查第二个主要元素,这是我的思路。

nums =
   
major1 = major2 = nums
count1 = count2 = 0
   
# 对抗阶段
for each in nums:
    if major1 == each:
      count1 += 1
      continue
   
    if major2 == each:
      count2 += 1
      continue
   
    if count1 == 0:
      major1 = each
      count1 = 1
      continue
   
    if count2 == 0:
      major2 = each
      count2 = 1
      continue
   
    count1 -= 1
    count2 -= 1
   
# 统计阶段
if nums.count(major1) > len(nums) / 3:
    print(major1)
if nums.count(major2) > len(nums) / 3:
    print(major2)

这是小甲鱼写的,因为一开始就赋值了major1 = major2 = nums,那为什么当循环到第一个2的时候,major2会变成了each=2了呢?
不是应该直接    count1 -= 1count2 -= 1 ,然后执行下一轮循环吗?

Twilight6 发表于 2022-4-29 13:42:04


这是小甲鱼写的,因为一开始就赋值了major1 = major2 = nums,那为什么当循环到第一个2的时候,major2会变成了each=2了呢?

因为甲鱼哥的列表是 nums = 有两个 1,在循环到 第一个 2 时,count1 = 2,count2 = 0

又因为此时 major1、major2 均为 1,都不等于 2,且此时 count1 = 2, count2 = 0,则最后一个 if 条件成立,前三 if 条件均不成立,执行最后一个 if 代码块,导致 major2 = each =2

小希子 发表于 2022-4-29 14:24:41

Twilight6 发表于 2022-4-29 13:42
因为甲鱼哥的列表是 nums = 有两个 1,在循环到 第一个 2 时,count1 = 2 ...

写代码还是要细心,我就一心盯着一开始的赋值了
页: [1]
查看完整版本: 22课的课后作业不懂