Вопрос задан 23.04.2018 в 20:11. Предмет Информатика. Спрашивает Сидоров Андрей.

Нужно на C++ Напишите сам код. Дано число. В этом числе необходимо изменить одну цифру таким

образом,чтобы новое число делилось на 3 и было бы максимально возможным. В исходном числе нужно обязательно изменить одну цифру,даже если исходное число уже делилось на 3. Программа получает на вход одно длинное натуральное число.Длина числа может достигать 100 цифр. Программа должна вывести другое натуральное число,удовлетворяющее условиям: 1)Новое число должно отличаться от данного ровно одной цифрой. 2)Новое число должно делиться на 3. 3)Новое число должно быть максимально возможным из всех таких чисел.
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Заутбаева Дильназ.

#include <cstdio>
#include <cstring>

int
main(void)
{
    enum
     {
        MAX_BUF_SIZE = 100
    };

    char buf[MAX_BUF_SIZE];
    scanf("%s", buf);
    int n = strlen(buf);
    int shift = 0;
    for (int i = 0; i < n; i++) {
        shift = (shift + buf[i] - '0') % 3;
    }
    shift = 3 - shift;
    int sel = -1;
    for (int i = 0; i < n; i++) {
        int tmp = buf[i] - '0' + shift;
        if (0 <= tmp && tmp <= 9) {
            sel = i;
            break;
        }
    }
    if (sel == -1) {
        for (int i = n - 1; i >= 0; i++) {
            int tmp = buf[i] - '0' - shift;
            if (0 <= tmp && tmp <= 9) {
                buf[i] -= shift;
                break;
            }
        }
    } else {
        buf[sel] += shift;
        while ('0' <= buf[sel] + 3 && buf[sel] + 3 <= '9') {
            buf[sel] += 3;
        }
    }
    printf("%s\n", buf);
    return 0;
}

0 0
Отвечает Бондаренко Ангелина.

#include <iostream>
#include <string>
#include <vector>
using namespace std;
 
int main()
{
    int sum = 0;
    vector<int> v;
    string s;
    cin >> s;
    for (int i = 0; i < s.size(); ++i) {
       v.push_back((int)s[i] - 49);
       ++sum; ++v[i];
   }
   int z = sum % 3; z = 3 - z;
   {
    int i = 0;
    while (i <= v.size() && (v[i] + z) > 9) {
       ++i;
    }
    if (i >= v.size()) {
      if (z == 3) {
          v[v.size() - 1] -= 3;
      } else {
          v[v.size() - 1] -= (3 + z);
      }
    } else {
       v[i] += z;
       while ((v[i] + 3) < 9) {
           v[i] += 3;
       }
     }
   }
   for (int i = 0; i < v.size(); ++i) {
       cout << v[i];
   }
   return 0;
}

0 0

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос