Задача: В имеющемся словаре найти пары слов ( анаграммы), при прочтении каждого из которых в обратном направлении образуется другое слово пары.
Ввод | Вывод |
qwerty ytrewq av ab va tg |
qwerty — ytrewq av — va |
12345 45 67 54 123567 543 54321 |
12345 — 54321 45 — 54 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#include <iostream> #include <vector> using namespace std; int main() { vector<string> x; vector<string> r; string t; int k = 0; while(getline(cin, t)) { x.push_back(t); } for(int i=0; i <(int) x.size(); i++) { string g, f=""; g=x[i]; for (int j=g.length()-1 ; j>=0 ; j--) f+= x[i][j]; for(int j=i+1; j < (int)x.size(); j++) { if (f==x[j]) { r.push_back(x[i]+" - "+f); } } } for(int i=0; i <(int) r.size(); i++) { cout<<r[i]<<endl; } return 0; } |
Записываем каждое слово словаря в вектор. А цикле переворачиваем каждое слово вектора и потом в цикле сравниваем его с каждым словом в словаре, если найдено обратное слово, то закидываем пару слов в новый вектор. Выводим вектор из пар слов на экран.
Зачтено за использование string.
Балл снижен поскольку Вы не использовали достаточно большой словарь словарь и не продемонстрировали реальные результаты.
Кстати, в задачнике очень узко понимается слово анаграмма. Но Вы правильно поступили использовав его определение.
Добавил слово «анаграмма» в метки.
Проверил программу на большом словаре. Вывод получился таким:
on — no
am — ma
keep — peek
god — dog
live — evil
part — trap
top — pot
tap — pat
tip — pit
flow — wolf
lap — pal
gut — tug