有只小跳蛙
我可以确认您的代码在否定条件的最后一部分的情况下产生相同的结果,并且在删除条件时会产生不同的结果。这可能看起来像一个奇迹,除非你认为整个条件在循环中被评估了很多次,并且很可能是三种情况(有条件,有否定条件,没有条件)都有不同的处理和结果的方式。我想说的是,对于条件和否定的条件,可以达到相同的结果,但以不同的方式。这里就是这种情况。如果在循环中引入一些 printf 调试,您将看到以完全不同的方式获得结果。具有否定的现有条件允许完整条件在其他迭代中变为 true,而不是没有否定的条件。最终两者导致相同的结果纯属偶然(无需进一步研究算法)。下面是 number 的执行跟踪、完整条件的结果以及 、 和 的中间值:inumsseenresult无条件:0 F [1, 1, 2] [0, 0, 0] []0 T [1, 1, 2] [True, 0, 0] []1 T [1, 1, 2] [True, 0, 0] []2 F [1, 1, 2] [True, 0, 0] []0 T [1, 1, 2] [True, 0, True] []1 T [1, 1, 2] [True, 0, True] []2 T [1, 1, 2] [True, 0, True] []1 T [1, 1, 2] [False, 0, False] []2 F [1, 1, 2] [False, 0, False] []0 F [1, 1, 2] [False, 0, True] []0 T [1, 1, 2] [True, 0, True] []1 T [1, 1, 2] [True, 0, True] []2 T [1, 1, 2] [True, 0, True] []1 T [1, 1, 2] [False, 0, True] []2 T [1, 1, 2] [False, 0, True] []附带条件:seen[i-1]0 F [1, 1, 2] [0, 0, 0] []0 T [1, 1, 2] [True, 0, 0] []1 T [1, 1, 2] [True, 0, 0] []2 F [1, 1, 2] [True, 0, 0] []0 T [1, 1, 2] [True, 0, True] []1 T [1, 1, 2] [True, 0, True] []2 T [1, 1, 2] [True, 0, True] []1 F [1, 1, 2] [False, 0, False] []0 F [1, 1, 2] [False, True, False] []0 T [1, 1, 2] [True, True, False] []1 T [1, 1, 2] [True, True, False] []2 F [1, 1, 2] [True, True, False] []1 T [1, 1, 2] [False, True, False] [[1, 1, 2]]2 F [1, 1, 2] [False, True, False] [[1, 1, 2]]0 F [1, 1, 2] [False, True, True] [[1, 1, 2]]1 T [1, 1, 2] [False, True, True] [[1, 1, 2], [1, 2, 1]]2 T [1, 1, 2] [False, True, True] [[1, 1, 2], [1, 2, 1]]2 F [1, 1, 2] [False, False, False] [[1, 1, 2], [1, 2, 1]]0 F [1, 1, 2] [False, False, True] [[1, 1, 2], [1, 2, 1]]0 T [1, 1, 2] [True, False, True] [[1, 1, 2], [1, 2, 1]]1 T [1, 1, 2] [True, False, True] [[1, 1, 2], [1, 2, 1]]2 T [1, 1, 2] [True, False, True] [[1, 1, 2], [1, 2, 1]]1 F [1, 1, 2] [False, False, True] [[1, 1, 2], [1, 2, 1]]0 F [1, 1, 2] [False, True, True] [[1, 1, 2], [1, 2, 1]]1 T [1, 1, 2] [False, True, True] [[1, 1, 2], [1, 2, 1], [2, 1, 1]]2 T [1, 1, 2] [False, True, True] [[1, 1, 2], [1, 2, 1], [2, 1, 1]]2 T [1, 1, 2] [False, False, True] [[1, 1, 2], [1, 2, 1], [2, 1, 1]]而对于否定的条件:!seen[i-1]0 F [1, 1, 2] [0, 0, 0] []0 T [1, 1, 2] [True, 0, 0] []1 F [1, 1, 2] [True, 0, 0] []0 T [1, 1, 2] [True, True, 0] []1 T [1, 1, 2] [True, True, 0] []2 F [1, 1, 2] [True, True, 0] []2 F [1, 1, 2] [True, False, False] [[1, 1, 2]]0 T [1, 1, 2] [True, False, True] [[1, 1, 2]]1 F [1, 1, 2] [True, False, True] [[1, 1, 2]]2 T [1, 1, 2] [True, False, True] [[1, 1, 2], [1, 2, 1]]1 T [1, 1, 2] [False, False, False] [[1, 1, 2], [1, 2, 1]]2 F [1, 1, 2] [False, False, False] [[1, 1, 2], [1, 2, 1]]0 F [1, 1, 2] [False, False, True] [[1, 1, 2], [1, 2, 1]]0 T [1, 1, 2] [True, False, True] [[1, 1, 2], [1, 2, 1]]1 F [1, 1, 2] [True, False, True] [[1, 1, 2], [1, 2, 1]]2 T [1, 1, 2] [True, False, True] [[1, 1, 2], [1, 2, 1], [2, 1, 1]]1 T [1, 1, 2] [False, False, True] [[1, 1, 2], [1, 2, 1], [2, 1, 1]]2 T [1, 1, 2] [False, False, True] [[1, 1, 2], [1, 2, 1], [2, 1, 1]]在这三种情况下,执行步骤都不同。两个(偶然)具有相同的结果。