На форумі обговорюються лише питання, пов'язані з олімпіадою
Ви не зайшли.
Не чекаємо пів року, викладаємо свої розв'язки тут.
#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)
Поза форумом