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

Необходимо на C++ Напишите сам код.

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

Задать свой вопрос
Данил Шакирдинов
лан, щяс помогу, может)
Альбина Ланшова
Я написал,а позже запутался и код не сохранил
Степан Погорелис
Так почему стоит учить с++?
2 ответа
include lt;cstdiogt;
include lt;cstringgt;

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 lt; n; i++)
        shift = (shift + buf[i] - '0') % 3;
   
    shift = 3 - shift;
    int sel = -1;
    for (int i = 0; i lt; n; i++)
        int tmp = buf[i] - '0' + shift;
        if (0 lt;= tmp amp;amp; tmp lt;= 9)
            sel = i;
            break;
       
   
    if (sel == -1)
        for (int i = n - 1; i gt;= 0; i++)
            int tmp = buf[i] - '0' - shift;
            if (0 lt;= tmp amp;amp; tmp lt;= 9)
                buf[i] -= shift;
                break;
           
       
    else
        buf[sel] += shift;
        while ('0' lt;= buf[sel] + 3 amp;amp; buf[sel] + 3 lt;= '9')
            buf[sel] += 3;
       
   
    printf("%s\n", buf);
    return 0;
include lt;iostreamgt;
include lt;stringgt;
include lt;vectorgt;
using namespace std;
 
int main()

    int sum = 0;
    vectorlt;intgt; v;
    string s;
    cin gt;gt; s;
    for (int i = 0; i lt; 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 lt;= v.size() amp;amp; (v[i] + z) gt; 9)
       ++i;
   
    if (i gt;= 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) lt; 9)
           v[i] += 3;
       
     
   
   for (int i = 0; i lt; v.size(); ++i)
       cout lt;lt; v[i];
   
   return 0;
Татьяна Мурша
У меня верно программа работает ^^
Надежда Сапосовская
Карасиков,вы нечаянно не на си делали?
Антон Марфуненков
Нет, на плюсах
Данил Великоредчанин
Просто коды различные
Олеся Сегура-Ласаррага
Хотя не знаю ,я скажем так новичок в это деле
Iljusha
Простенькие циклы сочинять только могу
Лилия Моторич
Не, ну если всем так не нравятся scanf и printf (хотя это абсолютно нормально так писать) могу поменять на std::cin, std::cout
Яна Лачугова
Ну я так и пишу)
Олеся Лепетухина
Только сходу вводишь using namespace std;и стд много раз писать не надобно
Степан Чимиров
Исправил, И больше поменять не могу.. попрошу модератора он исправит
, оставишь ответ?
Имя:*
E-Mail:


Добро пожаловать!

Для того чтобы стать полноценным пользователем нашего портала, вам необходимо пройти регистрацию.
Зарегистрироваться
Создайте собственную учетную запить!

Пройти регистрацию
Авторизоваться
Уже зарегистрированны? А ну-ка живо авторизуйтесь!

Войти на сайт