
Python
Задача по информатике и приложите решение пожалуйста

Если цифра 3 стоит на первом месте (1 вариант), то цифры 0 не может быть только в одной позиции числа.
1 * 2¹ * 3³ = 2 * 3³ вариантов
Если цифра 3 стоит на втором или последнем месте (2 варианта), цифры 0 не может быть на 2 местах.
2 * 2² * 3² = 2³ * 3² вариантов
Если цифра 3 стоит на одном из оставшихся мест (2 варианта), цифры 0 не может быть на 3 местах.
2 * 2³ * 3¹ = 2⁴ * 3
Итого: 2 * 3³ + 2³ * 3² + 2⁴ * 3 = 174
Но если очень хочется кодом, то:
1 * 2¹ * 3³ = 2 * 3³ вариантов
Если цифра 3 стоит на втором или последнем месте (2 варианта), цифры 0 не может быть на 2 местах.
2 * 2² * 3² = 2³ * 3² вариантов
Если цифра 3 стоит на одном из оставшихся мест (2 варианта), цифры 0 не может быть на 3 местах.
2 * 2³ * 3¹ = 2⁴ * 3
Итого: 2 * 3³ + 2³ * 3² + 2⁴ * 3 = 174
Но если очень хочется кодом, то:
cnt, i = 0, [0, 0, 0, 0, 0]
for i[0] in range(1, 4):
for i[1] in range(0, 4):
for i[2] in range(0, 4):
for i[3] in range(0, 4):
for i[4] in range(0, 4):
if i.count(3) != 1: continue
j = i.index(3)
if j > 0 and i[j - 1] == 0: continue
if j < 4 and i[j + 1] == 0: continue
cnt += 1
print(cnt)
Neobad Neobad
Спасибо гигантское
А пятизначные у нас начинаются с 10000 или с 00000? От этого сильно зависит ответ.
Вариант для 10000:
Вариант для 10000:
static string ToBase4(int n, int k)
{
string Result = string.Empty;
while (n != 0)
{
Result = (n % 4).ToString() + Result;
n /= 4;
}
while (Result.Length < k)
Result = "0" + Result;
return Result;
}
static void Main(string[] args)
{
int cnt = 0;
for (int i = 256; i < 1024; i++)
{
string s = ToBase4(i, 5);
if (s.ToCharArray().Count(x => x == '3') == 1 && !s.Contains("30") && !s.Contains("03"))
cnt++;
}
Console.WriteLine(cnt);
Console.ReadLine();
}
элеменарно! просто тупо начинаешь их подряд перечислять по возрастанию:
0 0 0 0
0 0 0 1
0 0 0 2
0 0 0 3 (1)
0 0 1 0
0 0 1 1
0 0 1 2
0 0 1 3 (2)
строка (1) - это первое попадание цифры 3, но там рядом 0, поэтому пропускаем. идем дальше - след. попадание - это строка (2), т.е. всего надо 8 чисел, чтобы 3 была не рядом с 0.
0 0 0 0
0 0 0 1
0 0 0 2
0 0 0 3 (1)
0 0 1 0
0 0 1 1
0 0 1 2
0 0 1 3 (2)
строка (1) - это первое попадание цифры 3, но там рядом 0, поэтому пропускаем. идем дальше - след. попадание - это строка (2), т.е. всего надо 8 чисел, чтобы 3 была не рядом с 0.
Февзи Минаев
но это компьютеры так считают, с нуля. если у вас в математике считают с "1", просто перепиши, чтобы начиналось с "1".
Neobad Neobad
всё ужасно. ответ вообще 174. вот и не понимаю ничего)
Февзи Минаев
не, вру, 5-значные же нужны. получается так:
0 0 0 0 1
0 0 0 0 2
0 0 0 0 3
0 0 0 1 0
0 0 0 1 1
0 0 0 1 2
0 0 0 1 3
0 0 0 0 1
0 0 0 0 2
0 0 0 0 3
0 0 0 1 0
0 0 0 1 1
0 0 0 1 2
0 0 0 1 3
Олег Дриленко
Пятизначных чисел в 4-ной системе счисления есть 1024 штуки. Задолбишься перечислять.
count = 0
for i in range(1024):
number = format(i, '05b')
if '30' in number or '03' in number:
continue
count += 1
print(count)
Похожие вопросы
- Товарищи. помогите пожалуйста с задачей по информатике
- Лес - задача по информатике
- Добрый вечер, помогите, пожалуйста, решить задачу по информатике
- Помогите, пожалуйста, с задачей по информатике в питоне.
- Решите задачу для информатики, прошу(язык программирования - питон)
- Как понять логику решения следующей задачи "ДЛЯ НАЧИНАЮЩИХ"?
- Решение задачи по программированию (желательно питон) Сложность O(квадрат(n))
- Как понять логику решения следующей задачи (ещё и "для начинающих" называется)?
- 25 задание ЕГЭ информатика. Всех четырёх часов не хватит, чтобы дождаться ответа на задачу. Подаю сигнал бедствия!
- Математика и решения задачи