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

написать программу на C++
задание:
сколько трехзначных чисел, оканчивающихся на 7, деляться на 3?

👇
Ответ:
fhftufdy12233p01cf0
fhftufdy12233p01cf0
31.12.2022

#include <stdio.h>

int main()

{

int i,j,k,l,n;

n=0;

for (i=100; i<=999; i++)

{

j= i/100;

l=100*j;

k = j-l;

if (k==7)

 n = n+1;

};

printf("N=%d\n",n);

exit(0);

}  

Объяснение:

4,6(69 оценок)
Открыть все ответы
Ответ:
St9747
St9747
31.12.2022
ответ 51.
И так, вам ввели начальные значения переменных. Вас требуют проверить два условия. Если результатом его проверки будет true(т.е. истина, а истина в данном случае будет, только если оба условия будут истинными) то вы должны выполнить следущие действия: x=3*a+2*b+c, если результатом проверки логических выражений будет false(т.е. ложь, а ложь в данном случае будет при условии, что хотя бы 1 из данных логических выражений ложное, ну или оба выражения ложные), то тогда вы выполняете это: x=5*a-b+c.
И так, выполняем алгоритм
10>5 и 5>6? Нет, т.к. второе условие не выполняется. Значение логического выражения false, значит выполняем действия по ветке else(иначе), x=5*10-5+6=51
Всё. На экран выведится число 51.
маловато для такого развёрнутого объяснения, так что отметьте хотя бы как лучший ответ \_(•_•)_/
4,4(99 оценок)
Ответ:
nikamalisch
nikamalisch
31.12.2022
Я буду думать, что сочетание - набор нулей и единиц, в котором на i-м месте стоит 0, если i-й буквы нет в сочетании, и 1, если она есть. Тогда, например, (0111) соответствует bcd. Общее число чисел по условию N, число единиц равно K. Этот список упорядочен по убыванию, и нам необходимо найти M-е число в этом списке.
Всего число выбрать K элементов из N равно C_N^K ("цэ из N по K").
Поймем, например, надо ли брать 1-й элемент. Всего сочетаний, где первый элемент взят: C_(N-1)^(K-1) {в самом деле, в этом случае осталось выбрать K-1 из оставшихся N-1}; не взят: C_(N-1)^K. Учитывая, что те, в которые первый элемент входит, идут перед теми, в которые он не входит, решаем: если M > C_(N-1)^(K-1), 1-й элемент не берём, иначе берём.
Дальше если 1-й взяли, M оставляем таким же, если нет - уменьшаем на C_(N-1)^(K-1).
Процесс повторяем, пока не найдем все буквы.
Осталось понять, как считать C_N^K. Исходя из рассуждений выше, C_N^K = C_(N-1)^(K-1) + C_(N-1)^K. Кроме того, C_N^0 = 1 для всех N, C_N^K = 0 при K < 0 или K > N. Пользуясь этим, можно найти все C_N^K. Не забываем про длинную арифметику: C_N^K может не влезать в обычные типы данных. Я буду писать на PascalABC.NET, там длинная арифметика есть - тип BigInteger, если нет - легко найти, как это писать. (Update: в данном случае всё влезет в longint - биномиальные коэффициенты не превысят 10 миллионов с небольшим). 
Итак, вот и искомый код:
begin
  var N, K: integer;
  read(N, K);
  var M := ReadString().ToBigInteger();
  var C: array[,] of BigInteger := new BigInteger[N, K];
  for var j := 1 to K - 1 do
    C[0, j] := 0;
  for var i := 0 to N - 1 do
    C[i, 0] := 1;
  for var i := 1 to N - 1 do
    for var j := 1 to K - 1 do
      C[i, j] := C[i - 1, j] + C[i - 1, j - 1];
  var possible := 'a';
  while K > 0 do
  begin
    if M <= C[N - 1, K - 1] then
    begin
      write(possible);
      dec(K);
    end
    else
      M := M - C[N - 1, K - 1];
    dec(N);
    inc(possible);
  end;
end.

Без BigInteger:
begin
  var N, K: integer;
  var M: longint;
  read(N, K, M);
  var C: array[,] of longint := new longint[N, K];
  for var j := 1 to K - 1 do
    C[0, j] := 0;
  for var i := 0 to N - 1 do
    C[i, 0] := 1;
  for var i := 1 to N - 1 do
    for var j := 1 to K - 1 do
      C[i, j] := C[i - 1, j] + C[i - 1, j - 1];
  var possible := 'a';
  while K > 0 do
  begin
    if M <= C[N - 1, K - 1] then
    begin
      write(possible);
      dec(K);
    end
    else
      M := M - C[N - 1, K - 1];
    dec(N);
    inc(possible);
  end;
end.
4,7(54 оценок)
Это интересно:
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ