Форум » Выполнение и анализ алгоритмов для исполнителей » Ошибка в 5.Р-11 » Ответить

Ошибка в 5.Р-11

Поляков: Sergey пишет: [quote]Здраствуйте я обнаружил ошибку в примере к заданию №5 ,а именно P-11. В задание спрашивается:* "Сколько разных значений будет показано на экране автомата при последовательном вводе всех натуральных чисел от 500 до 5000?"*. Вы не учли ,что* "2. Удаляются первая слева единица и все следующие непосредственно за ней нули. Если после этого в числе не остаётся цифр, результат этого действия считается равным нулю.*" То есть значений не 5 ,а 6. Так как число в степени 2(512, 1024, ...) будут равны нулю ,а значит он выедет на экран следующие различные значения {256, 0, 2048, 512, 1024, 4096}. P.S. Я всё просчитал на питоне вот код:[pre2] def f(x): n = bin(x) n = str(n)[2:] n = n[1:] if n.count("0") == len(n): return 0 while n[0] == "0": n = n[1:] return x - int(n, 2) set_s = set() for n in range(500, 5001): set_s.add(f(n)) print(set_s)[/pre2][/quote]Если на 2-м шаге не остается цифр, то нулем считается не результат работы алгоритма, а результат этого шага. Правильно так: [pre2]if n.count("0") == len(n): return x - 0[/pre2]Вот более короткая версия программы:[pre2] def alg(x): s = "{:b}".format(x) return x - int( s[1:], 2 ) allResults = set() for x in range(500, 5001): allResults.add(alg(x)) print(len(allResults))[/pre2]

Ответов - 0



полная версия страницы