Автор Евгений К., 9 класс
Постановка задачи
Есть некоторое сообщение, закодированное простой заменой символов (один на один с помощью некоторой таблицы). Известно, что в различных языках частотность появления букв разная. Если отсортировать буквы по их частотности в тексте, то можно попробовать и расшифровать сообщение.
Решение
// Определить частотность букв (в %) в строке текста stroka, алфавит задан строкой buk. using System; namespace Частотность_Букв_в_тексте { class Program { static void Main() { // ввод текста (любые символы) Console.WriteLine("Введите текст."); string stroka = Console.ReadLine().ToUpper(); // перевод в прописные long all = stroka.Length; // число символов // алфавит - русский. Можно изменять! string buk = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; int kol = buk.Length; // число букв // массив счетчиков букв double[] m = new double[buk.Length]; // Циклы для подсчетов for (int i = 0; i < all; i++) // по тексту for (int j = 0; j < kol; j++) // по буквам if (stroka[i] == buk[j]) { m[j]++; break; // досрочный выход, если найден } // Число букв в тексте: n <= all double n = 0; for (int j = 0; j < kol; j++) n += m[j]; // Парная сортировка массивов m[] и buk[] double c; char b1; char b2; char b3 = ' '; for (int i = 1; i < buk.Length - 1; i++) for (int j = 0; j < buk.Length - 1; j++) if (m[j] < m[j + 1]) { // перестановка в m[] c = m[j]; m[j] = m[j + 1]; m[j + 1] = c; // перестановка в buk[] b1 = buk[j]; b2 = buk[j + 1]; buk=buk.Replace(b1, b3); // важно buk=buk.Replace(), buk=buk.Replace(b2, b1); // НО не buk.Replace(); buk =buk.Replace(b3, b2); } // Вывод результата if (n < 1) Console.WriteLine("Вы не ввели ни одну букву алфавита в Вашем тексте!"); else { Console.WriteLine("Проценты содержания каждой из букв в тексте:"); for (int i = 0; i < buk.Length; i++) { if (m[i] > 0) { m[i] = Math.Round(m[i] / n * 100, 2); Console.WriteLine("{0}:\t{1}%", buk[i], m[i]); } } } Сonsole.ReadKey(); } } }
NEW: Наш Чат, в котором вы можете обсудить любые вопросы, идеи, поделиться опытом или связаться с администраторами.
Спасибо, Евгений!
Отмечу понятный и четкий алгоритм решения.
Набор символов можно задавать произвольным.
Полезен перевод символов в прописные буквы, проверена правильность перевода не только английских, но и русских букв алфавита, включая Ё (символы Unicode).
Использована связанная сортировка массива m[] и символов в строке buk.
Оформите ее как отдельный метод, на вход которого задается набор символов и строка текста, на выходе — частотность букв в тексте.