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);
}
}
}
Судя по тому, сколько времени этот код работает и сколько жрет памяти, тут не подразумевается решение "в лоб". Но код рабочий, чо... 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)
Написал код к заданию, отдельные элементы которого проверял вручную. По логике задания все понял. Но при компиляции счетчик "k" к заданному диапазону выдает 0 . Вопрос почему? как можно исправить? ( код ниже)