Ниже приведено решение проблемы знаменитости.
Проблема: предположим, что вы на вечеринке с n людьми (от 0 до n - 1), и среди них может быть одна знаменитость. Определение знаменитости состоит в том, что все остальные n - 1 человек знают его / ее, но он / она не знает ни одного из них.
Теперь вы хотите выяснить, кто знаменитость, или убедиться, что ее нет. Единственное, что вам разрешено делать, это задавать вопросы типа: «Привет, А. Знаете ли вы Б?» чтобы получить информацию о том, знает ли А Б. Вы должны выяснить знаменитость (или убедиться, что ее нет), задавая как можно меньше вопросов (в асимптотическом смысле).
def knows(a,b): //Function that returns 1 if a knows b else returns 0
people = [[0,0,0,0],[1,0,1,0],[1,0,0,0],[1,0,0,0]]
for i in range(0,4):
for j in range(0,4):
if(people[a][b]==1):
return 1
else:
return 0
a = 0
c=0
for b in range(1,4):
if(knows(a,b)):
c=b
for i in range(0,4):
if((i!=c) & (knows(i,c)) | (knows(c,i))!=1): //1
print c
Я хотел бы знать, как выполняется //1
. В приведенном выше случае 0 является знаменитостью. Следовательно, c = 0. Итак, во 2-й итерации:
i = 1
c = 0
i!=c //Since 1!=0, its true so we get 1
knows(1,0) //1 knows 0 hence return value : 1
knows(0,1) //0 doesn't know 1 hence return value : 0
Так //1
будет:
if (1 & 1 | 1):
print c
Здесь c должно быть напечатано, но оно не печатается и переходит к следующей итерации.