Расшифровать Кодировки вида BaseN используются давно.
Они были придуманы для перевода произвольной двоичной последовательности (последовательности байт) в текстовый формат для передачи этого текста по сети (например, для протокола электронной почты).
(N) в названии означает длину алфавита, в который кодируется текст. Алфавит всегда выбирается так, чтобы в нем содержались только печатаемые символы.
Вот, например, алгоритм Base32:
Возьмем алфавит как 234567. Всего 32 символа.
Поделим нашу битовую последовательность на блоки по 40 бит (5 байт). Если длина последовательности не кратна 40, то дополняем последний блок нулями и, в зависимости от количества недостающих целых байт, выполняем в самом конце такой алгоритм:
Если не хватило 1 байта, то в итоговом тексте заменим один последний символ на =
Если не хватило 2 байт, то в итоговом тексте заменим три последних символа на =
Если не хватило 3 байт, то в итоговом тексте заменим четыре последних символа на =
Если не хватило 4 байт, то в итоговом тексте заменим шесть последних символов на =
В каждом блоке выделяем по 5 бит и переводим их в десятичную систему счисления (получится число от 0 до 31). Это число будет позицией символа алфавита, который нужно добавить к итоговой строке. Не забываем, что тру программисты считают с нуля.
После выполнения пункта 3 получаем итоговую строку - это и есть наша входная последовательность, закодированная алгоритмом BASE32.
Любой текст можно преобразовать в битовую последовательность (например, при таблицы ASCII) и применить к нему алгоритм Base32. Например, строка 'A' кодируется в 'IE', а 'ABC' в 'IFBEG==='.
Задание
Мы закодировали флаг при алгоритма BASE32, но наш алфавит состоит из нашего русского алфавита, за исключением буквы Ё - . Получилось 'ОНФЗАШЫФМЩЭЦДРЛУЖМЩУДЯИ='. Ты знаешь что нужно делать - достать флаг.
#include <iostream>
using namespace std;
int main() {
unsigned int n;
cout << "N = ";
cin >> n;
float a[n][n],
sum = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << "a[" << i
<< "][" << j
<< "] = ";
cin >> a[i][j];
sum += a[i][j];
}
}
float avg = sum / (n * n);
cout << "Среднее арифметическое - "
<< avg << ", начинаю замену...\n";
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (a[i][j] < 0) {
cout << "a[" << i
<< "][" << j
<< "] = " << a[i][j]
<< " < 0, заменяю на "
<< avg << "...\n";
a[i][j] = avg;
}
}
}
cout << "\nИзменённый массив:\n";
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << a[i][j];
if ( !(j == n - 1) ) cout << ' ';
}
if ( !(i == n - 1) ) cout << '\n';
}
return 0;
}
// #2
#include <iostream>
using namespace std;
const unsigned short int n = 7;
int main() {
int a[n][n],
max;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cout << "a[" << i
<< "][" << j
<< "] = ";
cin >> a[i][j];
}
}
max = a[0][0];
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if ( (a[i][j] > max) && (i + j > n + 1) )
max = a[i][j];
}
}
cout << "Максимум ниже побочной диагонали: "
<< max;
return 0;
}
#include <iostream>
#include <math.h>
using namespace std;
int main() {
int a;
cin >> a;
int d = a%10;
string s = "yes";
while(abs(a) > 0) {
if(a%10 != d) {
s = "no";
break;
}
a/=10;
}
cout << s << endl;
}
2)
#include <iostream>
#include <math.h>
using namespace std;
int main() {
int a;
cin >> a;
int d = a%10;
a/=10;
string s = "no";
while(abs(a) > 0) {
if(a%10 == d) {
s = "yes";
break;
}
d = a%10;
a/=10;
}
cout << s << endl;
}