【问题标题】:Flaw in lock_pairs function in CS50's Tideman problem setCS50 的 Tideman 问题集中 lock_pairs 函数的缺陷
【发布时间】:2020-10-29 09:28:28
【问题描述】:

有人能指出我的逻辑有什么缺陷吗?不胜感激。

基本上,我试图用嵌套循环做的是检查任何一对中的失败者是否是前一对中的获胜者(具有更高的胜利强度)。如果是,然后我进入内部循环,检查这对的赢家是否在之前的任何一对中都是输家,从而创建一个循环。我对什么构成循环的理解是否正确?我怎样才能在不实施递归的情况下纠正这个问题?我不知道该怎么做。

void lock_pairs(void)
{
    
  bool cycleCheck = false;
  
  for (int u = 0; u < pair_count; u++)
  {
  
   for (int m = 0; m < u; m++)
   {
    if (pairs[u].loser == pairs[m].winner)
    {
        for (int k = m; k < u; k++)
        {
        if (pairs[u].winner == pairs[k].loser)
        {
            locked[pairs[u].winner][pairs[u].loser] = false;
            cycleCheck = true;
        }
        }
    }
   }
  
  
  if (cycleCheck == false)
  {
      locked[pairs[u].winner][pairs[u].loser] = true;
  }
  
  cycleCheck = false;
  
  }
      
}

【问题讨论】:

    标签: c cs50


    【解决方案1】:

    给定一对 A 击败 B,要检查一个循环,您应该遍历所有对以寻找 B 作为赢家。然后,对于每个输给 B 的候选人,您应该遍历所有对,寻找该候选人作为获胜者。然后,对于每一个输给这个候选人的候选人……你明白了。如果在任何时候出现 A,它就是一个循环。

    【讨论】:

      猜你喜欢
      • 2020-09-28
      • 1970-01-01
      • 2020-12-12
      • 1970-01-01
      • 2022-07-11
      • 1970-01-01
      • 2023-03-23
      • 2020-12-05
      • 1970-01-01
      相关资源
      最近更新 更多