Infeeqs 8 / 8 / 0 Регистрация: 15.02.2020 Сообщений: 195 |
||||
1 |
||||
Вывести количество нулей в числе27.02.2020, 23:55. Показов 41669. Ответов 13 Метки нет (Все метки)
Нужно вывести кол-во нулей в числе. Вот что я написал, но не понимаю, почему не работает, может кто подсказать?
0 |
iSmokeJC Am I evil? Yes, I am! 15987 / 8998 / 2605 Регистрация: 21.10.2017 Сообщений: 20,699 |
||||||||
28.02.2020, 00:01 |
2 |
|||||||
Сообщение было отмечено Infeeqs как решение Решение
Добавлено через 2 минуты
2 |
8 / 8 / 0 Регистрация: 15.02.2020 Сообщений: 195 |
|
28.02.2020, 00:07 [ТС] |
3 |
Спасибо
0 |
Модератор 35427 / 19452 / 4071 Регистрация: 12.02.2012 Сообщений: 32,486 Записей в блоге: 13 |
|
28.02.2020, 12:41 |
4 |
Вот что я написал — и где тут число? Я бы это решение (даже с поправкой iSmokeJC) не зачел бы.
0 |
ioprst 1303 / 843 / 409 Регистрация: 12.03.2018 Сообщений: 2,305 |
||||
28.02.2020, 13:26 |
5 |
|||
1 |
8 / 8 / 0 Регистрация: 15.02.2020 Сообщений: 195 |
|
29.02.2020, 17:52 [ТС] |
6 |
В каком смысле где тут число? Его должен человек ввести.
0 |
Am I evil? Yes, I am! 15987 / 8998 / 2605 Регистрация: 21.10.2017 Сообщений: 20,699 |
|
29.02.2020, 17:54 |
7 |
Infeeqs, имеется ввиду, что тут
a = str(input()) получается строка, а не число.
1 |
8 / 8 / 0 Регистрация: 15.02.2020 Сообщений: 195 |
|
29.02.2020, 18:08 [ТС] |
8 |
Ясно, ну ведь человек вводит число
0 |
Am I evil? Yes, I am! 15987 / 8998 / 2605 Регистрация: 21.10.2017 Сообщений: 20,699 |
|
29.02.2020, 18:10 |
9 |
Я надеюсь, ты понимаешь разницу между 1234 и «1234»?
0 |
easybudda Модератор 11758 / 7258 / 1720 Регистрация: 25.07.2009 Сообщений: 13,272 |
||||
29.02.2020, 19:27 |
10 |
|||
ну ведь человек вводит число Человек может ввести к примеру 001, или 0001, и в соответствующих строках будет 2 и 3 нуля, но в числе 1 с нулями как-то не задалось…
1 |
5407 / 3831 / 1214 Регистрация: 28.10.2013 Сообщений: 9,554 Записей в блоге: 1 |
|
29.02.2020, 19:48 |
11 |
ведь человек вводит число Как думаешь сколько нулей в числе 1e12?
1 |
4075 / 2487 / 525 Регистрация: 07.11.2019 Сообщений: 4,131 |
|
01.03.2020, 15:38 |
12 |
Garry Galler, думаю согласно стандарту IEEE754 Double precision 64-bit число нулей в 1e12 будет побольше..
0 |
5407 / 3831 / 1214 Регистрация: 28.10.2013 Сообщений: 9,554 Записей в блоге: 1 |
|
01.03.2020, 15:46 |
13 |
Почему больше то? Я имел ввиду MEp to intfloat.
0 |
4075 / 2487 / 525 Регистрация: 07.11.2019 Сообщений: 4,131 |
|
01.03.2020, 16:11 |
14 |
А в бинарном представлении? Добавлено через 2 минуты
0 |
Eсть вот такой кусок кода
надо чтобы он при вводе числа в котором есть ноль, выдавал это кол-во нулей
def zero(value):
x = 0
if value == '0':
print(x)
x = x + 1
F = input()
zero(F)
Не могу понять, что надо исправить
motpfofs
1,2842 золотых знака9 серебряных знаков24 бронзовых знака
задан 1 дек 2020 в 10:49
3
def count_zeroes(n):
return str(n).count('0')
ответ дан 1 дек 2020 в 10:53
USERNAME GOES HEREUSERNAME GOES HERE
10.3k21 золотой знак25 серебряных знаков51 бронзовый знак
0
если надо работать только с числом:
num = -10203040506070809
count = 0
value = abs(num)
while value != 0:
count += int(value % 10 == 0)
value //= 10
print(count)
абсолютное значение берется, потому что -1 // 10 = -1
и цикл будет бесконечным для отрицательных чисел
если можно работать со строкой:
num = -10203040506070809
count = str(num).count('0')
print(count)
ответ дан 1 дек 2020 в 11:32
ZhiharZhihar
36.9k4 золотых знака25 серебряных знаков67 бронзовых знаков
Если по честному работать с числом, то нужно делить:
def foo(n):
if n < 0:
return foo(-n)
i = 0
while n:
i += n % 10 == 0
n //= 10
return i
assert 3 == foo(10230240)
Для строки можно так:
def sfoo(sn):
# if sn[0] == '-': return sfoo(sn[1:])
# return sn.count('0')
# len([*filterfalse(int, sn)])
# return len([1 for d in sn if d == '0'])
# return sum(d == '0' for d in sn)
i = 0
for d in sn:
i += d == '0'
return i
assert 3 == sfoo('10230240')
ответ дан 1 дек 2020 в 11:03
vp_arthvp_arth
27.1k2 золотых знака45 серебряных знаков76 бронзовых знаков
def f(n):
return len(list(filter(lambda x: x == "0", str(n))))
ответ дан 1 дек 2020 в 11:11
DanisDanis
19.1k5 золотых знаков20 серебряных знаков55 бронзовых знаков
1
Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article
Given a positive integer N, the task is to find the number of leading zeros in its binary representation.
A leading zero is any 0 digit that comes before the first nonzero digit in a number’s binary form.
Examples:
Input : N = 16
Output : 27
Explanation: As Binary(16) = (00000000000000000000000000010000)Input : N = 33
Output : 26
Explanation: As Binary(16)=(00000000000000000000000000100001)
Solution 1: A naive approach is to convert the no. into its binary form and then count the no. of leading zeros. It uses expensive divide operations.
C++
#include <bits/stdc++.h>
using
namespace
std;
int
countZeros(unsigned
int
x)
{
int
total_bits =
sizeof
(x) * 8;
int
res = 0;
while
(!(x & (1 << (total_bits - 1)))) {
x = (x << 1);
res++;
}
return
res;
}
int
main()
{
int
x = 0;
cout << countZeros(x);
return
0;
}
Java
class
GFG {
static
byte
sizeofInt =
8
;
static
int
countZeros(
int
x)
{
int
total_bits = sizeofInt *
8
;
int
res =
0
;
while
((x & (
1
<< (total_bits -
1
))) ==
0
) {
x = (x <<
1
);
res++;
}
return
res;
}
public
static
void
main(String[] args)
{
int
x =
101
;
System.out.println(countZeros(x));
}
}
Python3
def
countZeros(x):
total_bits
=
32
res
=
0
while
((x & (
1
<< (total_bits
-
1
)))
=
=
0
):
x
=
(x <<
1
)
res
+
=
1
return
res
x
=
101
print
(countZeros(x))
C#
using
System;
class
GFG {
static
byte
sizeofInt = 8;
static
int
countZeros(
int
x)
{
int
total_bits = sizeofInt * 8;
int
res = 0;
while
((x & (1 << (total_bits - 1))) == 0) {
x = (x << 1);
res++;
}
return
res;
}
public
static
void
Main(String[] args)
{
int
x = 101;
Console.WriteLine(countZeros(x));
}
}
Javascript
<script>
let sizeofInt = 8;
function
countZeros(x)
{
let total_bits = sizeofInt * 8;
let res = 0;
while
((x & (1 << (total_bits - 1))) == 0)
{
x = (x << 1);
res++;
}
return
res;
}
let x = 101;
document.write(countZeros(x));
</script>
Time complexity: O(1)
Auxiliary space: O(1)
Solution 2: An efficient approach is to use Bitwise right shift operation to achieve the same. The steps in the algorithm are:
Let x be our no. then
unsigned y; int n = 32; y = x >>16; if (y != 0) {n = n -16; x = y;} y = x >> 8; if (y != 0) {n = n - 8; x = y;} y = x >> 4; if (y != 0) {n = n - 4; x = y;} y = x >> 2; if (y != 0) {n = n - 2; x = y;} y = x >> 1; if (y != 0) return n - 2; return n - x;
The above approach executes in only 12 to 20 instructions.
C++
#include <bits/stdc++.h>
using
namespace
std;
int
countZeros(
int
x)
{
unsigned y;
int
n = 32;
y = x >> 16;
if
(y != 0) {
n = n - 16;
x = y;
}
y = x >> 8;
if
(y != 0) {
n = n - 8;
x = y;
}
y = x >> 4;
if
(y != 0) {
n = n - 4;
x = y;
}
y = x >> 2;
if
(y != 0) {
n = n - 2;
x = y;
}
y = x >> 1;
if
(y != 0)
return
n - 2;
return
n - x;
}
int
main()
{
int
x = 101;
cout << countZeros(x);
return
0;
}
Java
import
java.io.*;
class
GFG {
static
int
countZeros(
int
x)
{
int
y;
int
n =
32
;
y = x >>
16
;
if
(y !=
0
) {
n = n -
16
;
x = y;
}
y = x >>
8
;
if
(y !=
0
) {
n = n -
8
;
x = y;
}
y = x >>
4
;
if
(y !=
0
) {
n = n -
4
;
x = y;
}
y = x >>
2
;
if
(y !=
0
) {
n = n -
2
;
x = y;
}
y = x >>
1
;
if
(y !=
0
)
return
n -
2
;
return
n - x;
}
public
static
void
main (String[] args) {
int
x =
101
;
System.out.println (countZeros(x));
}
}
Python3
def
countZeros(x):
n
=
32
;
y
=
x >>
16
;
if
(y !
=
0
):
n
=
n
-
16
;
x
=
y;
y
=
x >>
8
;
if
(y !
=
0
):
n
=
n
-
8
;
x
=
y;
y
=
x >>
4
;
if
(y !
=
0
):
n
=
n
-
4
;
x
=
y;
y
=
x >>
2
;
if
(y !
=
0
):
n
=
n
-
2
;
x
=
y;
y
=
x >>
1
;
if
(y !
=
0
):
return
n
-
2
;
return
n
-
x;
def
main():
x
=
101
;
print
(countZeros(x))
if
__name__
=
=
'__main__'
:
main()
C#
using
System;
class
GFG
{
static
int
countZeros(
int
x)
{
int
y;
int
n = 32;
y = x >> 16;
if
(y != 0)
{
n = n - 16;
x = y;
}
y = x >> 8;
if
(y != 0)
{
n = n - 8;
x = y;
}
y = x >> 4;
if
(y != 0)
{
n = n - 4;
x = y;
}
y = x >> 2;
if
(y != 0)
{
n = n - 2;
x = y;
}
y = x >> 1;
if
(y != 0)
return
n - 2;
return
n - x;
}
static
public
void
Main ()
{
int
x = 101;
Console.WriteLine(countZeros(x));
}
}
PHP
<?php
function
countZeros(
$x
)
{
$y
;
$n
= 32;
$y
=
$x
>> 16;
if
(
$y
!= 0)
{
$n
=
$n
- 16;
$x
=
$y
;
}
$y
=
$x
>> 8;
if
(
$y
!= 0)
{
$n
=
$n
- 8;
$x
=
$y
;
}
$y
=
$x
>> 4;
if
(
$y
!= 0)
{
$n
=
$n
- 4;
$x
=
$y
;
}
$y
=
$x
>> 2;
if
(
$y
!= 0) {
$n
=
$n
- 2;
$x
=
$y
;
}
$y
=
$x
>> 1;
if
(
$y
!= 0)
return
$n
- 2;
return
$n
-
$x
;
}
$x
= 101;
echo
countZeros(
$x
);
Javascript
<script>
function
countZeros(x)
{
let y;
let n = 32;
y = x >> 16;
if
(y != 0) {
n = n - 16;
x = y;
}
y = x >> 8;
if
(y != 0) {
n = n - 8;
x = y;
}
y = x >> 4;
if
(y != 0) {
n = n - 4;
x = y;
}
y = x >> 2;
if
(y != 0) {
n = n - 2;
x = y;
}
y = x >> 1;
if
(y != 0)
return
n - 2;
return
n - x;
}
let x = 101;
document.write(countZeros(x));
</script>
Time complexity: O(1)
Auxiliary space: O(1)
Solution 3: Using predefined functions
In Java, the numberOfLeadingZeros() method of the Integer and Long class is used to count the leading zeros of the integer.
C
#include <stdio.h>
int
main()
{
int
n = 19;
printf
(
"Count of leading zeros before first "
"occurrence: %d"
,
__builtin_clz(n));
return
0;
}
C++
#include <iostream>
using
namespace
std;
int
main()
{
int
n = 19;
cout <<
"Count of leading zeros before first "
"occurrence: "
<< __builtin_clz(n) << endl;
return
0;
}
Java
class
GFG {
public
static
void
main(String[] args)
{
int
n =
19
;
System.out.println(
"Count of leading zeros before first occurrence: "
+ Integer.numberOfLeadingZeros(n));
}
}
Python3
n
=
19
print
(
"Count of leading zeros before first occurrence: "
,
bin
(n)[
2
:].zfill(
32
).index(
'1'
))
C#
using
System;
public
class
GFG {
public
static
void
Main(
string
[] args)
{
int
n = 19;
string
binary = Convert.ToString(n, 2).PadLeft(
32,
'0'
);
Console.WriteLine(
"Count of leading zeros before first occurrence: "
+ binary.IndexOf(
'1'
));
}
}
Javascript
let n = 19;
let binary = n.toString(2).padStart(32,
'0'
);
console.log(
"Count of leading zeros before first occurrence: "
,binary.indexOf(
'1'
));
Output
Count of leading zeros before first occurrence: 27
Time complexity: O(1)
Auxiliary space: O(1)
Last Updated :
11 Apr, 2023
Like Article
Save Article
Skip to content
Задача «Количество нулей»
Условие
Дано N чисел: сначала вводится число N, затем вводится ровно N целых чисел.
Подсчитайте количество нулей среди введенных чисел и выведите это количество. Вам нужно подсчитать количество чисел, равных нулю, а не количество цифр.
Решение задачи от разработчиков на Python:
Другие интересные реализации задачи:
Смотреть видео — Задача «Количество нулей» решение на Python
Делитесь с друзьями ссылкой на ответ и задавайте вопросы в комментариях! 👇
Related Posts
В обоих решениях есть ошибка, либо показана неполная их часть. Нужно определить переменную num_zeroes
Продолжаем разбор демонстрационного варианта ЕГЭ по информатике 2022.
В этой статье разберём с 11-ого по 15 задание.
Источник задач: https://fipi.ru/ege/demoversii-specifikacii-kodifikatory#!/tab/151883967-5.
Успешной подготовки к ЕГЭ по информатике 2022!
Разбор демоверсии ЕГЭ по информатике 2022 (1-5 Задание)
Разбор демоверсии ЕГЭ по информатике 2022 (6-10 Задание)
Разбор демоверсии ЕГЭ по информатике 2022 (16-21 Задание)
Разбор демоверсии ЕГЭ по информатике 2022 (22-27 Задание)
Задание 11
При регистрации в компьютерной системе каждому объекту сопоставляется
идентификатор, состоящий из 15 символов и содержащий только символы
из 8-символьного набора: А, В, C, D, Е, F, G, H. В базе данных для хранения
сведений о каждом объекте отведено одинаковое и минимально возможное
целое число байт. При этом используют посимвольное кодирование
идентификаторов, все символы кодируют одинаковым и минимально
возможным количеством бит. Кроме собственно идентификатора, для
каждого объекта в системе хранятся дополнительные сведения, для чего
отведено 24 байта на один объект.
Определите объём памяти (в байтах), необходимый для хранения сведений
о 20 объектах. В ответе запишите только целое число – количество байт.
Решение:
Теперь нужно определить: сколько бит занимает одна ячейка (1 символ идентификатора!).
Когда речь идёт о количестве бит, применяем формулу, которую мы использовали в 7 задании из ЕГЭ по информатике. Там мы кодировали цвета для одного пикселя, а здесь нужно закодировать 8 букв для одного поля идентификатора.
Применяем:
N = 2i = 8
Следовательно, для кодирования одного поля идентификатора потребуется 3 бита.
Для всего идентификатора потребуется 3 * 15 = 45 бит. Т.к. используется целое число байт для хранения идентификатора, то в байтах идентификатор будет весить 6 байт (45/8 = 5,625).
Один объект будет весить 6 байт + 24 байта = 30 байт (Приплюсовали дополнительную информацию).
Для 20 объектов потребуется 20*30 байт = 600 байт.
Ответ: 600
Смотреть 11 Задание на YouTube
Задание 12
Исполнитель Редактор получает на вход строку цифр и преобразовывает её.
Редактор может выполнять две команды, в обеих командах v и w обозначают
цепочки цифр.
А) заменить (v, w).
Эта команда заменяет в строке первое слева вхождение цепочки v на
цепочку w. Например, выполнение команды
заменить (111, 27)
преобразует строку 05111150 в строку 0527150.
заменить (v, w) не меняет эту строку.
Б) нашлось (v).
Эта команда проверяет, встречается ли цепочка v в строке исполнителя
Редактор. Если она встречается, то команда возвращает логическое значение
«истина», в противном случае возвращает значение «ложь». Строка
исполнителя при этом не изменяется.
Цикл
ПОКА условие последовательность команд КОНЕЦ ПОКА
выполняется, пока условие истинно.
В конструкции
ЕСЛИ условие ТО команда1 ИНАЧЕ команда2 КОНЕЦ ЕСЛИ
выполняется команда1 (если условие истинно) или команда2 (если условие
ложно).
Какая строка получится в результате применения приведённой ниже
программы к строке, состоящей из 70 идущих подряд цифр 8? В ответе
запишите полученную строку.
НАЧАЛО ПОКА нашлось (2222) ИЛИ нашлось (8888) ЕСЛИ нашлось (2222) ТО заменить (2222, 88) ИНАЧЕ заменить (8888, 22) КОНЕЦ ЕСЛИ КОНЕЦ ПОКА КОНЕЦ
Решение:
Нас интересует вопрос и программа, которые приведены в конце задачи. Описание команд, как правило, не меняется от задачи к задаче.
Переведём программу, написанную на русском языке, на язык программирования Python.
s = '8'*70 while '2222' in s or '8888' in s: if '2222' in s: s = s.replace('2222', '88', 1) else: s = s.replace('8888', '22', 1) print(s)
В функции replace() важно не забыть поставить третьим аргументом единицу. Это означает, что мы производим замену один раз, а не сразу во всей строке.
Программа распечатает ответ 22.
Ответ: 22
Смотреть 12 Задание на YouTube
Задание 13
На рисунке представлена схема дорог, связывающих города А, Б, В, Г, Д, Е,
Ж, З, И, К, Л, М. По каждой дороге можно двигаться только в одном
направлении, указанном стрелкой.
Сколько существует различных путей из города А в город М, проходящих
через город В?
Решение:
В начале зачеркнём те стрелки, которые приводят к тому, что мы не пройдём через пункт B.
Представляем, что вообще не существует тех стрелок, которые мы зачеркнули.
Ставим 1 возле начального города А. Смотрим для каждого города, из каких пунктов входят стрелки в конкретный город. Суммируем те числа, которые стоят возле тех пунктов, из которых входят стрелки.
Сначала считаем числа для тех городов, для которых можем это сделать.
Число возле конечного города покажет ответ.
Ответ: 24
Смотреть 13 Задание на YouTube
Задание 14
Значение арифметического выражения
3*438 + 2*423 + 420 + 3*45 + 2*44 + 1
записали в системе счисления с основанием 16. Сколько значащих нулей
содержится в этой записи?
Решение:
На слово «значащие» можно не обращать внимание, потому что речь идёт об обычных нулях, которые встречаются в числе.
Напишем программу на языке Python.
f=3 * 4**38 + 2 * 4**23 + 4**20 + 3 * 4**5 + 2 * 4**4 + 1
count=0
while f>0:
d = f % 16
if d==0: count=count+1
f = f // 16
print(count)
В первой строчке мы переписываем арифметическое выражение. Две звёздочки подряд обозначают возведение в степень!
Затем, заводим переменную count для подсчёта нулей в 16-ричном виде.
С помощью цикла while, как раз, и получаем все цифры числа f в 16-ричной системе.
Мы смотрим остаток от деления числа f на 16, это и есть очередная цифра в 16-ричной системе (имитируем деление уголком!). Если цифра равна нулю, то её подсчитываем с помощью счётчика count. Так же необходимо сделать целочисленное деление на 16 при каждой итерации.
В конце распечатываем переменную count.
Ответ получился 15.
Ответ: 15
Смотреть 14 Задание на YouTube
Задание 15
На числовой прямой даны два отрезка: D = [17; 58] и C = [29; 80]. Укажите
наименьшую возможную длину такого отрезка A, для которого логическое
выражение.
(x ∈ D) → ((¬(x ∈ C) / ¬(x ∈ A)) → ¬(x ∈ D))
истинно (т.е. принимает значение 1) при любом значении переменной х.
Решение:
«Главной скрипкой» данного логического выражения является следование, потому что эта операция соединяет различных блоки логические блоки.
Нам нельзя допустить, чтобы первое выражение принимало 1, а второе 0, одновременно.
Рассмотрим при каких значениях x реализуется этот страшный вариант.
Опасные значения получаются [17; 29]. Чтобы опасный сценарий нейтрализовать, выражение ¬(x ∈ A) должно принимать значение 0. Тогда (x ∈ A) должно выдавать 1. Чтобы это происходило всегда при опасных значения, принимаем A=[17, 29]. Длина получается 12.
Ответ: 12Смотреть 15 Задание на YouTube
Разбор демоверсии ЕГЭ по информатике 2022 (1-5 Задание)
Разбор демоверсии ЕГЭ по информатике 2022 (6-10 Задание)
Разбор демоверсии ЕГЭ по информатике 2022 (16-21 Задание)
Разбор демоверсии ЕГЭ по информатике 2022 (22-27 Задание)