计算机科学A级,伪代码问题



我在课堂上遇到了这个问题,必须用伪代码来解决这个问题。问题来了(很抱歉(:

https://i.stack.imgur.com/GXGfb.png

这是我们得到的标记方案(解决方案(:

https://i.stack.imgur.com/GkXSm.png

我的解决方案在这里:

counter = 0 
red_score = 0
blue_score = 0
red_highscore = 0
blue_highscore = 0
while scores to compare:
if player_score[counter][0] == 0 THEN
blue_Score = blue_score + player_score[counter][1]
if player_score[counter][1] > blue_highscore THEN
blue_highscore = player_score[counter][1] : player_name[counter]
ELSE
red_Score = red_score + player_score[counter][1]
if player_score[counter][1] > red_highscore THEN
red_highscore = player_score[counter][1] : player_name[counter]
END IF
counter = counter + 1
END WHILE

OUTPUT 'Winning team'
if red_score > blue_score THEN 
OUTPUT 'Blue team'
ELSE
OUTPUT 'Red team'
OUTPUT 'Red Team Total Score', red_score
OUTPUT 'Blue Team Total Score', blue_score
OUTPUT 'Highest score in Red Team', red_player(player_name)
OUTPUT 'Highest score in Blue Team', blue_player(player_name)

现在我知道伪代码是非正式的,两个答案可能不同,但我不明白第一个例子中计数器是如何使用的,因为在2D数组中,它没有两个值,所以只做"blue_score=blue_score+score(counter("是行不通的。此外,如果计数器在开始时使用"if player(counter(=0 THEN",一旦计数器增加到2以上,那么它将把分数加到哪支球队,因为这两支球队只有0和1。

很明显,我在这里可能完全错了,但我只是想知道我错在哪里

非常感谢

看起来确实有点困惑。在给定的解决方案中,玩家由数字标识,有三个一维数组:player、player_name和score。其中第一个用于确定球员所在的球队。

您显然遵循了书面说明,并将player((和score((视为一个组合的2-D数组。

if player_score[counter][0] == 0 THEN
blue_Score = blue_score + player_score[counter][1]

所以,每个玩家都有一排;第一列是团队成员,第二列是分数。这对我来说似乎还可以(尽管我认为单独的数组更有逻辑意义,但这不是我们要求的(。

"counter"选择玩家,因此为0、1、2。。。

第二个索引0或1用于选择团队成员资格或分数列。

实际上,我认为伪代码在您强调的方面还不错:让您失望的只是,对数组进行索引的细节被抽象掉了。

因此,考虑算法期望i数据点(包括分数、球员姓名和球队id(作为输入,并且这些数据点与counter变量循环。对于计数器的某个特定值counter = i,将其player(counter)解释为获取第i个玩家的团队的函数或操作,或者直接表示该团队值(更好的名称可能是team(counter)(。同样,取score(counter)作为第i个分数。用于存储球员/球队名称和分数的特定数据结构,以及你如何准确地索引到这些数据结构中,这些细节是完全合理的,而且很可能会在伪代码中抽象出来。

也就是说,你可能找不到很多像player_scores[counter][0]player_scores[counter][1]这样的表达式的伪代码,它们将算法锁定在一个特定的、基于2d阵列的实现中,在该实现中,团队信息在某种程度上被任意地放入某个阵列的行的第一个槽中,并在这些行的第二个槽中得分,等等。在给定的解决方案中,只使用函数简写的方式要常见得多。当问题语句中给出了所有基于数组的实现细节时,很难避免这种事情,但这是非常标准的风格。

实际上,我想说的是,一个实现可能会硬编码0和1来表示蓝队和红队,这是伪代码中不应该有的另一个特殊性。也就是说,用IF team(counter)=blue代替他们对第i个数据条目是否属于蓝色团队的IF player(counter)=0检查将是一种改进。关于他们的伪代码,另一个令人困惑的地方是,他们混合了等式(=(和赋值运算符(通常是伪代码中的:=(。例如,当您将变量blue_player设置为当前值counter时,blue_player:=counterblue_player=counter更常见,并且您将保留=(不带冒号(进行比较。但总的来说,它们提供的抽象是一件好事。

最新更新