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 |
#include <stdio.h> #include <string.h> int sum_symbols (char *); void reverse_word (char *, int); int main (void) { char word[] = "Hello"; // заданное слово int sum = sum_symbols(word); // находим сумму кодов символов слова printf("sum = %dn", sum); // выводим сумму на экран if (sum % 2 == 0) { // если сумма четная reverse_word(word, strlen(word)); // переворачиваем слово puts(word); // выводим его на экран } return 0; // конец программы } // ------------------------------------------------------------- int sum_symbols (char *word) { int sum = 0; for (char *a = word; *a != ''; a++) sum += *a; return sum; } // ------------------------------------------------------------- void reverse_word (char *word, int size) { char tmp; for (int i = 0, k = size-1; i < k; ++i, --k) tmp = word[i], word[i] = word[k], word[k] = tmp; } // ------------------------------------------------------------- |
Алгоритм
-
Берете строку и подготавливайте ее
1.1 строку надо оттримировать(убрать мульти пробелы, пробелы в начале строки и в ее конце)
1.2 выкосить все знаки пунктуации (.,/-/* и тд)
1.3 сдампить в контейнер по словам (разбить на лексемы)
Дальше вариантов много — вот 2, что первые пришли в голову
-
Перебирая элементы контейнера, применить к первому символу слова
2.1 проверку на первый элемент через find в векторе с гласными буквами, если она там нашлась — то начиниется с гласной, если не — то нет)
2.2 регулярку rgx{«[aeiouyAEIOUY]»}; если проверка не прошла (просто гласных меньше — меньше регулярка)))) ), то через std::accumulate(std::begin(word), std::end(word), 0) посчитать сумму кодов символов данного слова и все это прибавить к накопительной сумме)
Вот пример кода
#include <iostream>
#include <string>
#include <iterator>
#include <numeric>
#include <regex>
#include <cctype>
static std::regex rgx{"[aeiouyAEIOUY]"};
std::string trim(std::string str, bool multi_space = true) {
auto trim_left_it{std::find_if(std::begin(str), std::end(str), [](char ch){return !std::isspace(ch);})};
str.erase(std::begin(str), trim_left_it);
auto trim_right_it{std::find_if(std::rbegin(str), std::rend(str), [](char ch){return !std::isspace(ch);})};
str.erase(trim_right_it.base(), std::end(str));
if (multi_space) {
std::string res;
std::unique_copy(std::begin(str), std::end(str),
std::back_insert_iterator<std::string>(res),
[](char a,char b){ return isspace(a) && isspace(b);});
return res;
}
return str;
}
std::string ClearPunctuationMarks(std::string str) {
str.erase(std::remove_if(std::begin(str), std::end(str), ispunct), std::end(str));
return str;
}
std::vector<std::string> split_str(const std::string& str) {
std::vector<std::string> tokens;
std::size_t prev = 0, pos = 0;
do {
pos = str.find(' ', prev);
if (pos == std::string::npos) {
pos = str.length();
}
std::string token = str.substr(prev, pos-prev);
if (!token.empty()) {
tokens.push_back(token);
}
prev = pos + 1;
} while (pos < str.length() && prev < str.length());
return tokens;
}
uint64_t SumOfStartVowelsWord(std::string line) {
uint64_t ret{0};
auto v_word{split_str(line)};
for (auto word : v_word) {
if (!std::regex_match(word.substr(0,1), rgx)) {
ret += std::accumulate(std::begin(word), std::end(word), 0);
}
}
return ret;
}
uint64_t SumOfStartVowelsWord2(std::string line) {
uint64_t ret{0};
auto v_word{split_str(line)};
std::vector<char> v_char{'a', 'e', 'i', 'o', 'u', 'y', 'A', 'E', 'I', 'O', 'U', 'Y'};
for (auto word : v_word) {
if (std::find(std::begin(v_char), std::end(v_char), word[1]) != std::end(v_char)) {
ret += std::accumulate(std::begin(word), std::end(word), 0);
}
}
return ret;
}
int main() {
std::string line{"test, Abs! efg"};
auto count{SumOfStartVowelsWord(ClearPunctuationMarks(trim(line)))};
std::cout << count << std::endl;
auto count2{SumOfStartVowelsWord2(ClearPunctuationMarks(trim(line)))};
std::cout << count2 << std::endl;
return 0;
}
Формулировка задачи:
Коды букв имеют значения: A-1, B-2, C-3, D-4, E-5, F-6, G-7, H-8, I-9, J-10, K-11, L-12, M-13, N-14, O-15, P-16, Q-17, R-18, S-19, T-20, U-21, V-22, W-23, X-24, Y-25, Z-26.
Заранее спасибо!
Код к задаче: «Посчитать сумму кодов букв, составляющих данное слово. Коды букв заданы»
textual
Uses crt; Var A:array['A'..'Z'] of integer; s:string; i,j,sum:integer; c:char; Begin ClrScr; Write('Input word:'); Readln(s); j:=0; sum:=0; For c:='A' to 'Z' do {в массив с символьными индексами заносим коды букв} Begin inc(j); {увеличиваем значение кода на 1} A[c]:=j; End; For i:=1 to length(s) do {проходим по слову} For c:='A' to 'Z' do {проходим по массиву} If s[i]=c then sum:=sum+A[c]; {если буква из слова и индекс совпадают, берём элемент соответствующий данному индексу} Writeln(sum); Readln; End.
Полезно ли:
8 голосов , оценка 4.500 из 5
Задание 4 (раньше №5) ЕГЭ по информатике:
По каналу связи передаются шифрованные сообщения, содержащие только пять букв: А, Б, В, Г, Д. Для передачи используется неравномерный двоичный код. Для букв А, Б и В используются кодовые слова 101000, 111100, 000 соответственно.
Укажите минимальную сумму длин кодовых слов для букв Г и Д, при которой код будет удовлетворять условию Фано.
✍ Решение:
Ответ: 5
Задание 4 (раньше №5) ЕГЭ по информатике:
По каналу связи передаются шифрованные сообщения, содержащие только пять букв: А, Б, В, Г, Д, Е, Ж.. Для передачи используется неравномерный двоичный код. Для букв А, Б, В и Г используются кодовые слова 0001000, 100, ООН, 111 соответственно.
Укажите минимальную сумму длин кодовых слов для букв Д, Е и Ж, при которой код будет удовлетворять условию Фано.
✍ Решение:
Ответ: 8
���������������� �� Visual Basic, VB .NET � VBA
�������� �������
��� �������� ���������� ���� �������� � ��������
«����������� ���� — ����»
�� ������� � ����������� ��� �����������.
�� ������ ����� �������� ������� ��������
� �������� ��������.
← �������
→ |
||||||
1 01.12.2009 06:38:04 |
2 02.12.2009 08:12:28 |
3 03.12.2009 07:33:51 |
4 04.12.2009 05:59:33 |
5 |
6 |
|
---|---|---|---|---|---|---|
7 07.12.2009 08:30:26 |
8 08.12.2009 09:33:04 |
9 09.12.2009 08:36:08 |
10 10.12.2009 05:19:28 |
11 11.12.2009 08:32:49 |
12 |
13 |
14 14.12.2009 06:39:46 |
15 15.12.2009 09:32:16 |
16 16.12.2009 06:43:54 |
17 17.12.2009 09:10:37 |
18 18.12.2009 07:42:01 |
19 |
20 |
21 21.12.2009 08:25:35 |
22 22.12.2009 05:43:09 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
�����
BiT
����������
0 �����������
0 �� ������
- �������
- ����������
←
��� �������
→
��������� ����� ����� ���� ��������
��������� ����� ����� ���� ��������
2009-12-08 07:00 ���������
��������� ����� ����� ���� ��������
Private Sub Form_Load()
Dim sum As Integer, txt As String
txt = «� ��� ���-��� ������� � Visual Basic!»
For i = 1 To Len(txt)
sum = sum + Asc(Mid(txt, i, 1))
Next
MsgBox «����� ����� �������� — » & sum
End Sub
� ���������
|
||