Задача
У Витека есть набор кубиков, на котором изображены английские буквы, причём как маленькие, так и большие. Недавно мама подарила ему ещё и набор кубиков с цифрами, в результате чего Витек научился быстро считать в пределах 10-ти. А вот папа имел неосторожность подарить ему набор разноцветных маркеров, после чего Витек начал экспериментировать с кубиками с цифрами: он зарисовывал очередную цифру и на её месте рисовал цифру на единицу большую. Так как он прекрасно понимал, что цифры 10 не существует, он вместо числа 10 всегда писал цифру 0.
Учтите, что иногда мама звала Витека покушать и он не успевал завершить начатую работу и написать новую цифру – в этом случае кубик навсегда оставался пустым, такие кубики обозначены символом пробела.
Вам необходимо помочь Витеку и написать программу, которая выполнит очередную маркЕровку кубиков по указанным правилам. Так как Вы находитесь не дома, а на олимпиаде, то мама Вас кушать не позовёт и работу Вам обязательно нужно закончить.
Входные данные
Единственная строка, состоящая из описанных выше символов. Длина строки не превышает 255 символов.
Выходные данные
Единственная строка – результат работы Вашей программы.
Тесты
Входные данные | Выходные данные |
abc1234567890ABC | abc2345678901ABC |
00000000 | 11111111 |
546476756 | 657587867 |
Алгоритм решения
Проверяем, является ли элемент строки числом. Если это 9, заменяем ее на 1, иначе увеличиваем значение символа на 1.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#include <iostream> using namespace std; int main() { string str; getline(cin, str); for(int i = 0; i < str.length(); i++){ if(str[i]>='0' && str[i]<'9'){ str[i]++; } else if(str[i]=='9') str[i]='0'; } cout << str; return 0; } |
Решение через c-like string
Принцип работы тот же, что и со string решением, но в цикле перед проверкой, является ли символ числом также от символа отнимается код нуля, чтобы дальше с этим символом можно было работать как с целым числом. В конце цикла с заменой цифр нужно снова прибавить символ нуля, чтобы массив правильно выводился.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
#include <iostream> #include <string.h> using namespace std; int main() { int n = 256; char a[n]; cin.getline(a,n); for(int i = 0; i < strlen(a); i++){ a[i]-='0'; if (a[i]>=0 && a[i]<9){ a[i]+=1; } else if(a[i]==9) a[i]=0; a[i]+='0'; } for(int i=0;i<strlen(a);i++){ cout << a[i]; } return 0; } |
Cсылка на засчитанное решение с помощью c-like string
Ссылка на код в среде ideone
В одном месте забыли else, в другом сделали забавную опечатку str[i]=='0';/
В результате программа не работает правильно.
Исправил, Игорь Евгеньевич.
Хорошо, Юра, принято.
Это было решение через string. Осталось сделать похожий код для c-string.
Зачтено. Только замените string.h на cstring, как это принято в С++. И печатайте строку на циклом, а просто cout << a;.
И, кстати, я бы заменил второй условный оператор на остаток от деления. Вышло бы что-то вроде такого