Rubber-soul
?>

Написать программу на языке СИ, а именно подсказать как нужно преобразовать массив в другие числа. Первая часть программы имеется. Задание: Написать программу, которая сжимает серии массива, состоящего из единиц и нулей по следующему принципу: • например, массив [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1] преобразуется в [4, 7, 2, 4] (т.к. начинается с нуля, то сразу записывается количество элементов первой серии); • а массив [1, 1, 1, 0, 0, 0, 0, 0, 0, 0] преобразуется в [0, 3, 7] (т.к. первая серия - это единицы, то первый элемент преобразованного массива 0

Информатика

Ответы

Olgera1
В наихудшем случае, последнее новогоднее число - 11111111.

#include <iostream>

bool isNewYearNumber(int n);
int sumDigits(int num);
bool hasZero(int n);

int main() {
  const int LASTNEWYEARNUMBER = 11111111;
  long long sum = 0;
  for(int i = 0; i <= LASTNEWYEARNUMBER; i++)
    if ( isNewYearNumber(i) )
      sum += i;
  std::cout << "Сумма всех новогодних чисел: " << sum << '\n';
  return 0;
}

bool isNewYearNumber(int n)
{
  if ( !( hasZero(n) ) && sumDigits(n) == 8)
    return true;
  else
    return false;
}

int sumDigits(int num)
{
  int sum = 0;
  while ( num > 0 ) {
    sum += num % 10;
    num /= 10;
  }
  return sum;
}

bool hasZero(int n)
{
  if (n < 0)
    n = -1 * n;
  if (n % 10 == 0)
    return true;
  else if (n / 10 > 0)
     hasZero(n / 10);
  else
    return false;
}
vipteatr
В наихудшем случае, последнее новогоднее число - 11111111.

#include <iostream>

bool isNewYearNumber(int n);
int sumDigits(int num);
bool hasZero(int n);

int main() {
  const int LASTNEWYEARNUMBER = 11111111;
  long long sum = 0;
  for(int i = 0; i <= LASTNEWYEARNUMBER; i++)
    if ( isNewYearNumber(i) )
      sum += i;
  std::cout << "Сумма всех новогодних чисел: " << sum << '\n';
  return 0;
}

bool isNewYearNumber(int n)
{
  if ( !( hasZero(n) ) && sumDigits(n) == 8)
    return true;
  else
    return false;
}

int sumDigits(int num)
{
  int sum = 0;
  while ( num > 0 ) {
    sum += num % 10;
    num /= 10;
  }
  return sum;
}

bool hasZero(int n)
{
  if (n < 0)
    n = -1 * n;
  if (n % 10 == 0)
    return true;
  else if (n / 10 > 0)
     hasZero(n / 10);
  else
    return false;
}

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

Написать программу на языке СИ, а именно подсказать как нужно преобразовать массив в другие числа. Первая часть программы имеется. Задание: Написать программу, которая сжимает серии массива, состоящего из единиц и нулей по следующему принципу: • например, массив [0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1] преобразуется в [4, 7, 2, 4] (т.к. начинается с нуля, то сразу записывается количество элементов первой серии); • а массив [1, 1, 1, 0, 0, 0, 0, 0, 0, 0] преобразуется в [0, 3, 7] (т.к. первая серия - это единицы, то первый элемент преобразованного массива 0
Ваше имя (никнейм)*
Email*
Комментарий*