Top.Mail.Ru
Ответы

Пожалуйста, помогите решить задачу на Python. Упражнение 141, 142, 143, 144, 145.

Упражнение 141. Английская пропись
(65 строк)
Несмотря на то что популярность оплаты по чекам за последние годы
серьезно снизилась, некоторые компании до сих пор используют этот способ для ведения взаиморасчетов с сотрудниками и поставщиками. Сумма
на чеках обычно указывается дважды: один раз цифрами, второй – прописью на английском языке. Повторение суммы двумя разными формами
записи призвано не позволить недобросовестным сотрудникам или поставщикам изменять сумму на чеках перед их обналичиванием.
В данном упражнении вам необходимо написать функцию, принимающую в качестве входного параметра число от 0 до 999 и возвращающую
строку прописью. Например, если значение параметра будет равно 142,
функция должна вернуть следующую строку: «one hundred forty two». Используйте один или несколько словарей вместо условных конструкций
if/elif/else для выработки решения этой задачи. Напишите основную
программу, в которой пользователь будет вводить числовое значение, а на
экран будет выводиться соответствующая сумма прописью.
Упражнение 142. Уникальные символы
(Решено. 16 строк)
Напишите программу, определяющую и выводящую на экран количество
уникальных символов во введенной пользователем строке. Например,
в строке Hello, World! содержится десять уникальных символов, а в строке
zzz – один. Используйте словарь или набор для решения этой задачи.
Упражнение 143. Анаграммы
(Решено. 39 строк)
Анаграммами называются слова, образованные путем взаимной перестановки букв. В английском языке, например, анаграммами являются слова
«live» и «evil», а в русском – «выбор» и «обрыв». Напишите программу, которая будет запрашивать у пользователя два слова, определять, являются
ли они анаграммами, и выводить на экран ответ.
Упражнение 144. Снова анаграммы
(48 строк)
Понятие анаграмм не ограничивается словами, а может быть расширено
до целых предложений. Например, строки «William Shakespeare» и «I am
a weakish speller» являются полными анаграммами, если игнорировать
пробелы и заглавные буквы.
Расширьте свою программу из упражнения 143, добавив возможность
проверки на анаграммы целых фраз. При анализе не обращайте внимания
на знаки препинания, заглавные буквы и пробелы.
Упражнение 145. Эрудит
(Решено. 18 строк)
В известной игре Эрудит (Scrabble™) каждой букве соответствует определенное количество очков. Общая сумма очков, которую получает игрок,
составивший это слово, складывается из очков за каждую букву, входящую
в его состав. Чем более употребимой является буква в языке, тем меньше
очков начисляется за ее использование. В табл. 6.5 приведены все соответствия букв и очков из английской версии игры.
Напишите программу, рассчитывающую и отображающую количество
очков за собранное слово. Создайте словарь для хранения соответствий
между буквами и очками и используйте его в своем решении.

По дате
По рейтингу
Аватар пользователя
Новичок

142

12345678910
 #include <iostream> 
#include <set> 
#include <string> 
int main() { 
    std::string line; 
    std::getline(std::cin, line); 
    std::set<char> chars; 
    for (auto ch : line) chars.insert(ch); 
    std::cout << chars.size() << '\n'; 
} 

143

1234567891011121314
 #include <cctype> 
#include <iostream> 
#include <set> 
#include <string> 
int main() { 
    std::string sa, sb; 
    std::getline(std::cin, sa); 
    std::getline(std::cin, sb); 
    std::multiset<char> msa; 
    for (auto ch : sa) if (isalpha(ch)) msa.insert(tolower(ch)); 
    std::multiset<char> msb; 
    for (auto ch : sb) if (isalpha(ch)) msb.insert(tolower(ch)); 
    puts(msa == msb ? "YES" : "NO"); 
} 

144

12345678910111213
 #include <cctype> 
#include <iostream> 
#include <set> 
#include <string> 
int main() { 
    std::string wa, wb; 
    std::cin >> wa >> wb; 
    std::multiset<char> msa; 
    for (auto ch : wa) msa.insert(tolower(ch)); 
    std::multiset<char> msb; 
    for (auto ch : wb) msb.insert(tolower(ch)); 
    puts(msa == msb ? "YES" : "NO"); 
} 

141

12345678910111213141516171819202122232425262728293031
 #include <array> 
#include <iostream> 
#include <string> 
int main() { 
    const std::array<std::string, 20> a{ 
        "zero", "one", "two", "three", "four", 
        "five", "six", "seven", "eight", "nine", 
        "ten", "eleven", "twelve", "thirteen", 
        "fourteen", "fifteen", "sixteen", 
        "seventeen", "eighteen", "nineteen" 
    }; 
    const std::array<std::string, 10> b{ "", 
        "ten", "twenty", "thirty", "forty", "fifty", 
        "sixty", "seventy", "eighty", "ninety" 
    }; 
    int value; 
    std::cin >> value; 
    std::string text; 
    const auto h = value / 100; 
    const auto d = value % 100; 
    const auto t = value / 10 % 10; 
    const auto u = value % 10; 
    text = h ? a[h] + " hundred " : ""; 
    if (d < 20)  text += a[d]; 
    else { 
       text += t ? b[t] + " " : ""; 
       text += u ? a[u] + " " : "";  
    } 
    if (text.back() == ' ') text.pop_back(); 
    std::cout << text << '\n'; 
}