Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

5 задание ЕГЭ информатика

Faceit.com Знаток (371), закрыт 1 год назад
Искомое задание прикреплено ниже*
Написал код к заданию, отдельные элементы которого проверял вручную. По логике задания все понял. Но при компиляции счетчик "k" к заданному диапазону выдает 0 . Вопрос почему? как можно исправить? ( код ниже)
Лучший ответ
Jurijus Zaksas Искусственный Интеллект (473263) 1 год назад
Код твой страшен и непонятен.
Запомни: если ты скопировал строку, ты сделал что-то не так.
Ну и хуже всего в нем то, что он не делает то, что требуется. Почему ты решил, что надо проверять только до 10000? Там все гораздо печальнее. Я уже не говорю о быстродействии строковых операций, да еще и на питоне.

Код на C#:

 namespace ConsoleApp2 
{
internal class Program
{
static long DigiCount(long n)
{
int[] cnt = new int[] { 0, 0 };
for (; n > 0; n >>= 1)
cnt[n & 1]++;
if (cnt[0] == cnt[1])
return n & 1;
if (cnt[0] > cnt[1])
return 1;
return 0;
}

static long TransformNumber(long n)
{
for (int i = 0; i < 3; i++)
n = (n << 1) | DigiCount(n);
return n;
}

static HashSet Nums = new HashSet();

static void ProcessNum(long a)
{
long n = TransformNumber(a);
if (n >= 123455 && n <= 987654322)
lock (Nums)
{
if (!Nums.Contains(n))
Nums.Add(n);
}
}

static void Main(string[] args)
{
Parallel.For(123455 / 8, 987654322 / 8 + 1,
i =>
{
ProcessNum(i);
}
);
Console.WriteLine(Nums.Count);
}
}
}
Судя по тому, сколько времени этот код работает и сколько жрет памяти, тут не подразумевается решение "в лоб". Но код рабочий, чо...
Остальные ответы
Давид Мейстер Мастер (2088) 1 год назад
 def count_digits(number): 
odd_count = 0
even_count = 0
while number > 0:
digit = number % 10
if digit % 2 == 0:
even_count += 1
else:
odd_count += 1
number = number // 10
return odd_count, even_count

def build_binary_representation(number):
binary_str = bin(number)[2:]
return binary_str

def apply_algorithm(number):
for _ in range(3):
odd_count, even_count = count_digits(number)
if even_count > odd_count:
number = number * 2
elif odd_count > even_count:
number = number * 2 + 1
else:
if number % 2 == 0:
number = number * 2
else:
number = number * 2 + 1
return number

count = 0
for n in range(123455, 987654322): # Перебираем числа в заданном диапазоне
result = apply_algorithm(n)
if 123455 <= result <= 987654321: # Проверяем, принадлежит ли результат указанному диапазону
count += 1

print("Количество чисел, которые могут получиться в результате работы этого алгоритма:", count)
Faceit.comЗнаток (371) 1 год назад
а если придерживаться моему коду, то что не так?
Давид Мейстер Мастер (2088) Faceit.com, Можно код текстом чтобы я мог потестисть?
Faceit.comЗнаток (371) 1 год назад
k=0
for n in range(1,10**4):
b=bin(n)[2:]
d=int(b,2)
s=str(d).count('0')
s1=str(d).count('1')
s2=str(d).count('2')
s3=str(d).count('3')
s4=str(d).count('4')
s5=str(d).count('5')
s6=str(d).count('6')
s7=str(d).count('7')
s8=str(d).count('8')
s9=str(d).count('9')
if (s+s2+s4+s6+s8)>(s1+s3+s5+s7+s9):
b=b+'1'
if (s+s2+s4+s6+s8)<(s1+s3+s5+s7+s9):
b=b+'0'
if (s+s2+s4+s6+s8)==(s1+s3+s5+s7+s9):
if d%2==0:
b=b+'1'
else:
b=b+'0'
(часть с 3 if повторяем еще 2 раза)
r=int(b,2)
a=123455
b=98765431
while r>a and r<b:
k+=1
print(k)
Давид Мейстер Мастер (2088) Faceit.com, Здесь ограничение, закинул код сюда: https://pastein.ru/t/-FV
Jurijus ZaksasИскусственный Интеллект (473263) 1 год назад
А почему ты уверен, что полученные таким образом числа не повторяются?
Похожие вопросы