鱼C论坛

 找回密码
 立即注册
查看: 1416|回复: 2

[已解决]22课的课后作业不懂

[复制链接]
发表于 2022-4-28 16:06:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
x = [2, 2, 4, 2, 3, 6, 2, 4, 4 ,4]
x2 = x[:]
j = x[0]
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[0]
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 = [1, 1, 2, 1, 3, 2, 3, 2]
   
major1 = major2 = nums[0]
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[0],那为什么当循环到第一个2的时候,major2会变成了each=2了呢?
不是应该直接    count1 -= 1  count2 -= 1 ,然后执行下一轮循环吗?
最佳答案
2022-4-29 13:42:04

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


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

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-4-29 13:42:04 | 显示全部楼层    本楼为最佳答案   

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


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

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-4-29 14:24:41 | 显示全部楼层
Twilight6 发表于 2022-4-29 13:42
因为甲鱼哥的列表是 nums = [1, 1, 2, 1, 3, 2, 3, 2] 有两个 1,在循环到 第一个 2 时,count1 = 2 ...

写代码还是要细心,我就一心盯着一开始的赋值了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 14:56

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表