Похожие числа
ограничение времени 1 секунда
ограничение памяти 64mb
ввод стандартный ввод или input.txt
вывод стандартный вывод или output.txt
назовем два числа похожими, если они состоят из одних и тех же цифр.
например, числа 1132 и 32321 похожие, а 12 и 123 – нет (в первом числе нет цифры 3). требуется написать программу, которая определит, являются ли два данных натуральных числа похожими.
формат ввода
в первой строке входных данных записано натуральное число k – количество запросов (1 ≤ k ≤ 10). в следующих k строках содержится по два целых числа а и в , разделенных пробелом (1 ≤ а, в ≤ 109).
формат вывода
выходной файл должен содержать k строк. для каждого теста в отдельной строке надо выдать сообщение “yes”, если а и в являются похожими, или “no”, если таковыми не являются.
пример 1
ввод вывод
1
1132 32321
yes
пример 2
ввод вывод
2
12 123
11 111
no
yes
5
Объяснение:
Маска в двоичном представлении - это 32 бита, первые несколько бит равны 1, остальные 0. Адрес сети из адреса узла получается побитовым И, то есть IP адрес переводится в двоичную форму, и вычисляется побитовое И с соответствующим битом маски.
Переводим IP узла и адрес сети в двоичную форму (можно сообразить, что достаточно перевести только второй справа байт)
159.152.66.19 = ... . ... . 01000010 . ...
159.152.64.0 = ... . ... . 01000000 . ...
Побитовое И работает так: 1 И 1 = 1, все остальные комбинации 0.
01 в начале должно сохраниться, поэтому второй страва байт маски начинается на 11.
10 в конце должно превратиться в 00, поэтому второй справа байт маски оканчивается на 00.
На оставшихся местах 0 превратился в 0, так что в маске может быть как 0, так и 1.
Вот все возможные варианты маски:
(16 единиц) 11000000 (8 нулей)
(16 единиц) 11100000 (8 нулей)
(16 единиц) 11110000 (8 нулей)
(16 единиц) 11111000 (8 нулей)
(16 единиц) 11111100 (8 нулей)
#include <iostream>
#include <vector>
using namespace std;
int main()
{
float summa, count = 0;
vector<int> result, zero;
for (int i = 21; i < 200; i++)
{
if (i % 3 == 0)
{
result.push_back(i);
count++;
summa += i;
if (i % 10 == 0)
{
zero.push_back(i);
}
}
}
cout << R"(Числа которые заканчиваютса нулем )" << endl;
for (int i = 0; i < zero.size(); i++)
{
cout << zero[i] << ' ';
}
cout << endl;
cout << R"(Числа которые кратные 3)" << endl;
for (int i = 0; i < result.size(); i++)
{
cout << result[i] << ' ';
}
cout << endl;
cout << R"(Количество таких чисел = )" << count << endl;
Дальше немного сами подумайте если я это написал и вы это не поняли. Советую учить С++. Потому что вы не будете понимать что вы делаете.