Обновить eminidinahuy.cpp

This commit is contained in:
oltnd
2024-12-07 00:12:57 +03:00
parent 878e5ff2ab
commit ead3232e9c

View File

@@ -1 +1,293 @@
// 13 47
#include <iostream>
#include <fstream>
#include <cctype>
#include <limits>
#include <string>
#include <sstream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <cstring>
#include <iomanip> // Для форматирования вывода
#include <vector>
#include <map>
#include <random>
#include <ctime>
#include <set>
using namespace std;
void sieveOfEratosthenes(int n) {
// Создаем динаический массив для хранения информации о простых числах
bool* isPrime = new bool[n + 1];
// Изначально предполагаем, что все числа простые
memset(isPrime, true, (n + 1) * sizeof(bool));
// 0 и 1 не являются простыми числами
isPrime[0] = isPrime[1] = false;
// Решето Эратосфена
for (int i = 2; i * i <= n; ++i) {
if (isPrime[i]) {
for (int j = i * i; j <= n; j += i) {
isPrime[j] = false;
}
}
}
// Вывод всех простых чисел
cout << "Простые числа до " << n << ": ";
for (int i = 2; i <= n; ++i) {
if (isPrime[i]) {
cout << i << " ";
}
}
cout << endl;
// Освобождаем память
delete[] isPrime;
}
void z2() {
int n;
cout << "Введите предел для поиска простых чисел: ";
cin >> n;
if (n < 2) {
cout << "Простых чисел нет." << endl;
}
else {
sieveOfEratosthenes(n);
}
}
void z3_13() {
// Имя файла, куда будем записывать текст
string fileName = "output.txt";
// Открываем файл для записи
ofstream outFile(fileName);
// Проверяем, открылся ли файл
if (!outFile) {
cerr << "Ошибка при открытии файла!" << endl;
}
// Текст для записи
string text = "Im not racicst, or anything. I am";
// Записываем текст в файл
outFile << text << endl;
// Закрываем файл
outFile.close();
cout << "Текст успешно записан в файл " << fileName << endl;
}
void z4_13() {
int m;
cout << "Введите натуральное число m (m < 27): ";
cin >> m;
if (m <= 0 || m >= 27) {
cout << "Число m должно быть больше 0 и меньше 27." << endl;
}
cout << "Трехзначные числа, сумма цифр которых равна " << m << ":" << endl;
// Перебор всех трёхзначных чисел
for (int number = 100; number <= 999; ++number) {
int sum = 0;
int temp = number;
// Считаем сумму цифр числа
while (temp > 0) {
sum += temp % 10; // Добавляем последнюю цифру
temp /= 10; // Убираем последнюю цифру
}
// Проверяем сумму
if (sum == m) {
cout << number << " ";
}
}
cout << endl;
}
void printFile(const string& filename) {
ifstream file(filename);
if (!file) {
cerr << "Не удалось открыть файл: " << filename << endl;
return;
}
cout << "Содержимое файла \"" << filename << "\":" << endl;
int number;
while (file >> number) {
cout << number << " ";
}
cout << endl;
file.close();
}
void z5_13() {
const string inputFileName = "input.txt";
const string outputFileName = "output.txt";
int M;
cout << "Введите количество чисел M: ";
cin >> M;
if (M <= 0) {
cerr << "M должно быть положительным числом." << endl;
}
// Генерация M случайных чисел и запись их в файл
ofstream inputFile(inputFileName);
if (!inputFile) {
cerr << "Ошибка при открытии файла для записи: " << inputFileName << endl;
}
srand(time(nullptr)); // Инициализация генератора случайных чисел
for (int i = 0; i < M; ++i) {
int randomNumber = rand() % 100; // Генерация числа от 0 до 99
inputFile << randomNumber << " ";
}
inputFile.close();
// Вывод содержимого исходного файла
printFile(inputFileName);
// Чтение чисел из файла
ifstream inputFileRead(inputFileName);
if (!inputFileRead) {
cerr << "Ошибка при открытии файла для чтения: " << inputFileName << endl;
}
vector<int> numbers;
int number;
while (inputFileRead >> number) {
numbers.push_back(number);
}
inputFileRead.close();
// Подсчет количества повторений каждого числа
map<int, int> frequency;
for (int num : numbers) {
frequency[num]++;
}
// Нахождение максимального количества повторений
int maxFrequency = 0;
for (const auto& pair : frequency) {
if (pair.second > maxFrequency) {
maxFrequency = pair.second;
}
}
// Сохранение чисел с максимальным количеством повторений
vector<int> mostFrequentNumbers;
for (const auto& pair : frequency) {
if (pair.second == maxFrequency) {
mostFrequentNumbers.push_back(pair.first);
}
}
// Сортировка чисел с максимальным количеством повторений
sort(mostFrequentNumbers.begin(), mostFrequentNumbers.end());
// Запись результатов в файл
ofstream outputFile(outputFileName);
if (!outputFile) {
cerr << "Ошибка при открытии файла для записи: " << outputFileName << endl;
}
for (int num : mostFrequentNumbers) {
outputFile << num << " ";
}
outputFile.close();
// Вывод содержимого результирующего файла
printFile(outputFileName);
}
void z5_47() {
int n;
cout << "Введите размер массива: ";
cin >> n;
if (n <= 0) {
cerr << "Размер массива должен быть положительным числом." << endl;
}
vector<int> array(n);
cout << "Введите элементы массива: ";
for (int i = 0; i < n; ++i) {
cin >> array[i];
}
// Словарь для хранения частоты элементов и их индексов
map<int, vector<int>> frequency;
// Заполнение словаря
for (int i = 0; i < n; ++i) {
frequency[array[i]].push_back(i);
}
// Проверка наличия повторяющихся элементов
vector<int> duplicates; // Хранение уникальных повторяющихся элементов
for (const auto& pair : frequency) {
if (pair.second.size() > 1) { // Если элемент повторяется
duplicates.push_back(pair.first);
}
}
if (duplicates.empty()) {
cout << "В массиве нет повторяющихся элементов." << endl;
}
cout << "Повторяющиеся элементы найдены. Их количество: " << duplicates.size() << endl;
// Сортировка повторяющихся элементов
sort(duplicates.begin(), duplicates.end());
cout << "Повторяющиеся элементы: ";
for (int num : duplicates) {
cout << num << " ";
}
cout << endl;
// Вывод положения каждого повторяющегося элемента
for (int num : duplicates) {
cout << "Элемент " << num << " встречается на позициях: ";
for (int index : frequency[num]) {
cout << index << " ";
}
cout << endl;
}
}
int main()
{
cout << "Задание 2";
z2();
cout << "Задание 3.13";
z3_13();
cout << "Задание 4.13";
z4_13();
cout << "Задание 5.13";
z5_13();
cout << "Задание 5.47";
z5_47();
}