М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
Melenocka0606
Melenocka0606
20.06.2022 02:23 •  Информатика

Написать на с++ хулиганы первый и второй не любят доску почёта своей школы. поэтому они решили наглым образом украсть оттуда школьную стенгазету, сделанную отличниками, и порвать на части. первый хулиган брал кусочек газеты и рвал его на 4 части, а второй хулиган – на 7. однако скоро дежурные нашли n кусочков этой газеты. им стало интересно, все ли кусочки они нашли. им. дежурные так старались, что упустить из виду они могли не более 2 кусочков. входные данные натуральное число n < 1018. выходные данные выведите “yes”, если все кусочки найдены, и “no” – в противном случае. пример вход выход 4 yes 67 yes 11 no

👇
Ответ:
lubvic77
lubvic77
20.06.2022
Вот, правда немного запутано - не стал задумываться об элегантности кода. Алгоритм, вроде как, нашёл (N-1/b). 

#include <iostream>
using namespace std;
int main()
{
int n, b=3, x;
start:
setlocale (LC_ALL, "Russian");
cout << "Введите число собранных кусочков: ";
cin >> n;
x=n-1;
if (x%b==0)
cout << "Yes" << endl;
else
cout << "No" << endl;
goto start;
system ("pause");
}
4,7(55 оценок)
Открыть все ответы
Ответ:
tri0
tri0
20.06.2022

#include <stdio.h>

#include <stdlib.h>

int main()

{

int year, century;

//     { "I", "IV", "V", "IX",  "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M" };

 short ArrRom[]   = { 73,  18774, 86, 18776,  88, 22604, 76, 22595, 67, 17220, 68, 17229, 77 };

 int ArrRom2[] =    { 1,    4,    5,    9,    10,   40,  50,   90,  100, 400, 500,  900,  1000, 5000};

 /*Т.к тип char в себе содержит только 1 байт,а нам местами желательно хранить 2 символа (4 римскими цифрами - IV),

 поэтому используем тип short и помещаем в него десятичные представления наших символов, если с одинарными символами

 все просто, то с двойными делаем такую схему: ASCII код символа I в десятичной системе счисления = 73, далее мы

 переводим в двойчную систему счисления ‭01001001‬ тоже самое делаем с символом V = 86 = ‭01010110‬, теперь совмещаем

 0100100101010110 и переводим данное число в десятный формат = 18774. И того код символа I попадаем в старший

 байт, а код символа V в младший.**

*/

 printf("Enter the year\n");

 

 while (scanf_s("%d", &year) != 1 || year>399900)

 {

  printf("Invalid format\n");

  system("pause");

  return 0;

 }

 

if (year % 100 == 0)

{

 century = year / 100;

}

else

{

 century = year / 100 + 1;

}

printf("%d year refer to ", year);

for (int i = 0;century != 0; ++i) //Условие конца цикла когда век будет равен 0

{

 int j=0;

 for (; century >= ArrRom2[j]; ++j);// В этом цикле введенный нами век сравнивается с массивом содержащим цифры.

 //Если век больше текущего элемента массива, то сравниваем со следующим. Условие конца цикла - век больше очередного

 //элемента массива.*

   

 printf("%c",ArrRom[j - 1] >> 8);  //**т.к. в оджном элементе массива закодировано 2 символа, чтобы достать первый,

 //мы сдвигаем значение на 8 бит вправо. Например, число 0100100101010110 в двоичной системе сдвигаем на 8 бит вправо

 //получаем 0000000001001001. При печати будет выглядеть как I.

 printf("%c", ArrRom[j - 1] << 8 >> 8); //здесь сначала сдвигаем на 8 бит влево, чтобы получить 0101011000000000,

 //т.е. убрать младший байт. Затем сдвигаем обратно, чтобы убрать появившиеся нули в младшем байте. В итоге получаем

 //0000000001010110.  При печати будет выглядеть как V.

 century -= ArrRom2[j - 1];//*т.к при сравнении цикл останавливается на элементе большем, чем нам нужен, то мы

 //вычитаем 1 из итератора чтобы получить нужный нам эллемент,затем мы вычитаем его из века.

}

printf(" century \n");

system("pause");

return 0;

}

Объяснение:

4,5(2 оценок)
Ответ:
Victoriahamidul
Victoriahamidul
20.06.2022

#include <stdio.h>

#include <stdlib.h>

int main()

{

int year, century;

//     { "I", "IV", "V", "IX",  "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M" };

 short ArrRom[]   = { 73,  18774, 86, 18776,  88, 22604, 76, 22595, 67, 17220, 68, 17229, 77 };

 int ArrRom2[] =    { 1,    4,    5,    9,    10,   40,  50,   90,  100, 400, 500,  900,  1000, 5000};

 /*Т.к тип char в себе содержит только 1 байт,а нам местами желательно хранить 2 символа (4 римскими цифрами - IV),

 поэтому используем тип short и помещаем в него десятичные представления наших символов, если с одинарными символами

 все просто, то с двойными делаем такую схему: ASCII код символа I в десятичной системе счисления = 73, далее мы

 переводим в двойчную систему счисления ‭01001001‬ тоже самое делаем с символом V = 86 = ‭01010110‬, теперь совмещаем

 0100100101010110 и переводим данное число в десятный формат = 18774. И того код символа I попадаем в старший

 байт, а код символа V в младший.**

*/

 printf("Enter the year\n");

 

 while (scanf_s("%d", &year) != 1 || year>399900)

 {

  printf("Invalid format\n");

  system("pause");

  return 0;

 }

 

if (year % 100 == 0)

{

 century = year / 100;

}

else

{

 century = year / 100 + 1;

}

printf("%d year refer to ", year);

for (int i = 0;century != 0; ++i) //Условие конца цикла когда век будет равен 0

{

 int j=0;

 for (; century >= ArrRom2[j]; ++j);// В этом цикле введенный нами век сравнивается с массивом содержащим цифры.

 //Если век больше текущего элемента массива, то сравниваем со следующим. Условие конца цикла - век больше очередного

 //элемента массива.*

   

 printf("%c",ArrRom[j - 1] >> 8);  //**т.к. в оджном элементе массива закодировано 2 символа, чтобы достать первый,

 //мы сдвигаем значение на 8 бит вправо. Например, число 0100100101010110 в двоичной системе сдвигаем на 8 бит вправо

 //получаем 0000000001001001. При печати будет выглядеть как I.

 printf("%c", ArrRom[j - 1] << 8 >> 8); //здесь сначала сдвигаем на 8 бит влево, чтобы получить 0101011000000000,

 //т.е. убрать младший байт. Затем сдвигаем обратно, чтобы убрать появившиеся нули в младшем байте. В итоге получаем

 //0000000001010110.  При печати будет выглядеть как V.

 century -= ArrRom2[j - 1];//*т.к при сравнении цикл останавливается на элементе большем, чем нам нужен, то мы

 //вычитаем 1 из итератора чтобы получить нужный нам эллемент,затем мы вычитаем его из века.

}

printf(" century \n");

system("pause");

return 0;

}

Объяснение:

4,5(44 оценок)
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ