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

0 голосов
108 просмотров

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

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


Информатика (55 баллов)
оставил комментарий Одаренный (4.2k баллов)

лан, щяс помогу, может)

оставил комментарий (55 баллов)

Я написал,а потом запутался и код не сохранил

оставил комментарий (55 баллов)

Так почему стоит учить с++?

Дано ответов: 2
0 голосов
Одаренный (4.2k баллов)
 
Правильный ответ

#include
#include
#include
using namespace std;
 
int main()
{
    int sum = 0;
    vector 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];<br>   }
   return 0;
}

оставил комментарий Одаренный (2.9k баллов)

У меня правильно программа работает ^^

оставил комментарий (55 баллов)

Карасиков,вы случайно не на си делали?

оставил комментарий Одаренный (2.9k баллов)

Нет, на плюсах

оставил комментарий (55 баллов)

Просто коды разные

оставил комментарий (55 баллов)

Хотя не знаю ,я скажем так новичок в это деле

оставил комментарий (55 баллов)

Простенькие циклы составлять только могу

оставил комментарий Одаренный (2.9k баллов)

Не, ну если всем так не нравятся scanf и printf (хотя это абсолютно нормально так писать) могу заменить на std::cin, std::cout

оставил комментарий (55 баллов)

Ну я так и пишу)

оставил комментарий (55 баллов)

Только сразу вводишь using namespace std;и стд много раз писать не надо

оставил комментарий Одаренный (4.2k баллов)

Исправил, И больше изменить не могу.. попрошу модера он исправит

0 голосов
Одаренный (2.9k баллов)

#include
#include

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) {<br>            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) {<br>                buf[i] -= shift;
                break;
            }
        }
    } else {
        buf[sel] += shift;
        while ('0' <= buf[sel] + 3 && buf[sel] + 3 <= '9') {<br>            buf[sel] += 3;
        }
    }
    printf("%s\n", buf);
    return 0;
}

...