На форумі обговорюються лише питання, пов'язані з олімпіадою
Ви не зайшли.
Не чекаємо пів року, викладаємо свої розв'язки тут.
#include <iostream>; #include <string> using namespace std; int main() { string s; int sum=0; cin >> s; int n=s.length(); //Знаходимо суму цифр і цифри int *M = new int[n];//числовий масив для зберігання цифр числа for (int i=0; i<n; i++) { M[i]=char(s[i])-48;//зберігаємо цифру sum=sum+M[i];//знаходимо суму цифр } //число ділиться на 3, якщо сума його цифр ділиться на 3 //Визначаємо яке мінімальне значення можна додати до цифри, щоб число ділилось на 3 int min_plus = 3 - sum % 3; //Визначаємо яке мінімальне значення можна відняти від цифри, щоб число ділилось на 3 int min_minus = sum % 3; if (min_minus == 0) min_minus = 3; //якщо додаємо int max_plus; for (int i=0; i<n; i++) { //визначаємо скільки найбільше можна додати max_plus = 9-M[i]; if (max_plus >= min_plus)//якщо до цифри можна додати хоть мінімальне min_plus { M[i]=M[i]+min_plus+(max_plus-min_plus)-(max_plus-min_plus)%3; for(int i=0; i<n; i++) cout << M[i]; return 0; } } //якщо віднімаємо M[n-1]=M[n-1]-min_minus; //виводимо результат for(int i=0; i<n; i++) cout << M[i]; return 0; }
Відредаговано LVV (2020-11-08 12:21:00)
Поза форумом
Мой код:
#include <cstdio> #include <cstring> using std::scanf; using std::strlen; using std::fputs; int main() { char s[256],d; scanf("%s",s); int n=strlen(s),i,m=0; for(i=0;i<n;++i) m+=(s[i]-'0'); for(i=0;i<n;++i) if((d="987"[('9'-s[i]+m)%3])>s[i]) s[n=i]=d; if(i==n) s[n-1]="654"[('9'-s[n-1]+m)%3]; fputs(s,stdout); return 0; }
Кстати, раздельные темы также провоцируют
Повинно пройти, хоча б 60 секунд, між відправкою повідомлень. Будь ласка, спробуйте відправити наступне повідомлення трохи пізніше.
что, впрочем, мелочи.
Поза форумом
хоча б 60 секунд
Меня ни разу так не расстраивали, потому что слоупок.
А теперь код (python 2.7)
inp = map(int, raw_input()) rem = sum(inp) % 3 increased = False for i in xrange(len(inp)): digit = inp[i]+(3-rem) if digit < 10: inp[i] = digit + (9-digit)/3*3 increased = True break if not increased: inp[-1] -= rem + 3*(not rem) print ''.join(map(str,inp))
Відредаговано andervish (2020-11-11 18:23:36)
Поза форумом