Задача.
«Балда». Для заданного достаточно длинного слова найти в имеющемся словаре все слова, в которых использованы только буквы, имеющиеся в заданном слове (с учетом кратности вхождения).
Тесты.
Ввод | Вывод | Комментарий |
programming | a in on go no an man am or arm air ring ago pain grin rain mom main among roar grip pair rip map nor aim iron program pin ma moan groan gang gain rag pig piano ramp gin ram rig | Пройден |
polymorphism | is his him my so or room sir ship lip slip mom shop simply pop rip poor pool sip oil holy hip limp hop prop spy loom | Пройден |
В качестве словаря используется список 2500 наиболее употребительных английских слов (составлен Александром Васильевым).
Код(string).
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 33 34 35 |
#include <iostream> using namespace std; int main() { string word; //описание строк для хранения исходного слова и слов из словаря cin >> word; string dict; bool b1,b2; //описание вспомогательных переменных string temp; while (cin >> dict) { temp=word; b1=true; for (size_t j=0;j<dict.length();j++) // проверяем или все символы из dict содержатся в temp { b2=false; for (size_t i=0;i<temp.length();i++) { if(dict[j]==temp[i]) { b2=true; temp[i]='.'; break; } } if (!b2) { b1=false; break; } } if (b1) cout << dict << " "; } return 0; } |
Используем ввод как условие цикла while. Вводим вспомогательную строку temp, в которую записываем исходное слово. Символы строки temp, которые совпадают с символами данного слова из словаря, заменяем на точки (подходят любые символы, кроме английских букв), учитывая, таким образом, кратность вхождения. Также для проверки вводим логические переменные b1(содержатся ли все символы из строки dict в temp?) и b2(содержится ли j-ый символ из dict в temp?).
Код(c-string).
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 33 34 35 36 37 38 39 40 |
#include <iostream> #include <cstring> using namespace std; int main() { char word[100]; //описание символьных массивов для хранения исходного слова и слов из словаря cin >> word; char dict[100]; bool b1,b2; //описание вспомогательных переменных char temp[strlen(word)]; for (size_t i=0;word[i]!='';i++) { temp[i]=word[i]; } while (cin >> dict) { strcpy(temp,word); b1=true; for (size_t j=0;dict[j]!='';j++) // проверяем или все символы из dict содержатся в temp { b2=false; for (size_t i=0;temp[i]!='';i++) { if(dict[j]==temp[i]) { b2=true; temp[i]='.'; break; } } if (!b2) { b1=false; break; } } if (b1) cout << dict << " "; } return 0; } |
Решение аналогично.