Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 22.12.2013
Сообщений: 10
1

Написать эффективный алгоритм

06.06.2015, 21:43. Показов 597. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Будем называть два целых числа «разноделящимися», если большее по модулю делится без остатка на меньшее по модулю и нет ни одной такой цифры, которая входила бы в десятичную запись обоих этих чисел. Меньшее по модулю из этих чисел будем называть «разноделящимся» делителем большего по модулю числа. Составить программу находящую на заданном интервале число (максимальное) имеющее наибольшее количество различных «разноделящихся» делителей. Вывести это число и количество его различных «разноделящихся» делителей. В отдельно взятом одном из «разноделящихся» чисел цифры могут повторяться; А и В - границы интервала числа, не превосходящие по модулю число 2 000 000; границы входят в интервал, задаются и вводятся в произвольном порядке; длина интервала не превосходит 202; если на заданном интервале несколько чисел имеют равное наибольшее количество различных «разноделящихся» делителей, то взять максимальное из них; число «1» считать делителем (обычным) любого числа; знак числа цифрой не считать;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.06.2015, 21:43
Ответы с готовыми решениями:

Разработать эффективный алгоритм быстрой сортировки
Быстрая сортировка. Разработайте эффективный алгоритм для упорядочивания n элементов таким образом,...

Эффективный алгоритм поиска простых чисел на С++
Хотел написать функцию которая вычисляет простое число или сложное, но оно не вычисляется. Цикл...

Эффективный алгоритм для поиска минимума в массиве
В массиве X(N) найти значения двух наименьших элементов и вывести их в порядке убывания....

Более эффективный алгоритм нахождения суммы sin^n(x)
найти сумму sin(x)+sin^2(x)+...+Sin^n(x) или другую любую сумму cout << "input value of n&x" <<...

1
0 / 0 / 0
Регистрация: 17.09.2020
Сообщений: 2
01.10.2020, 08:35 2
C++
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
#include <iostream>
#include <algorithm>
#include <vector>
 
#include <Windows.h>
#include <stdio.h>
#include <tchar.h>
#include<iostream>
#include<conio.h>
#include <iostream>
#include <io.h>
#include <fcntl.h>
#include <vector>
 
#include <iostream>
#include <fstream>
#include <string>
 
using namespace std;
 
bool proverka(int A, int B) {
    A = abs(A);
    B = abs(B);
 
    vector <int> AA, BB;
 
    for (int i = 0; A; i++) {
        AA.push_back(A % 10);
        A = A / 10;
    }
 
    for (int i = 0; B; i++) {
        BB.push_back(B % 10);
        B = B / 10;
    }
 
    for (int i = 0; i < AA.size(); i++) {
        for (int j = 0; j < BB.size(); j++) {
            if (AA[i] == BB[j]) {
                return false;
            }
        }
    }
    return true;
}
 
vector<int> RD(int A, int B) {
    if (A > B) {
        swap(A, B);
    }
    int counterRD = 0;
    int RDNum = 0;
    for (int i = A; i <= B; i++) {
        int tempCounterRD = 0;
        for (int j = 1; j <= abs(B); j++) {
            if (abs(i) > abs(j) && abs(i) % abs(j) == 0 && proverka(i, j)) {
                tempCounterRD++;
            }
        }
        if (tempCounterRD >= counterRD) {
            counterRD = tempCounterRD;
            RDNum = i;
        }
    }
    vector <int> result;
    result.push_back(RDNum);
    result.push_back(counterRD * 2);
    return result;
}
 
int main()
{
 
    SetConsoleCP(1251);
 
    // открываем файл для записи результата работы программы
    std::ofstream out("result.txt");
    if (!out.is_open()) {
        exit('0');
    }
 
    out << "Задача 15 \"Разноделящиеся числа\"" << std::endl;
    out << "Будем называть два целых числа \"разноделящимися\",";
    out << "если большее по модулю делится без остатка на меньшее";
    out << " по модулю и нет ни одно такой цифры, которая входила ";
    out << "бы в десятичную запись обоих этих чисел.Меньшее по модулю ";
    out << "из этих чисел будем называть \"разноделящимся\" делителем ";
    out << "большего по модулю числа. Составить программу находящую на ";
    out << "заданном интервале число (максимальное) имеющее наибольшее ";
    out << "количество различных \"разноделящихся\" делителей. В ";
    out << "отдельно взятом одном из \"разноделящихся\" чисел цифры ";
    out << "могут повторяться; А и В  - границы интервала числа, ";
    out << "не превосходящие по модулю число 2 000 000; границы входят ";
    out << "в интервал, задаются и вводятся в произволльном порядке; длина ";
    out << "интервала не превосходит 202; если на заданном интервале ";
    out << "несколько чисел имеют равное наибольшее количество ";
    out << "различных \"разноделяющихся\" делителей, то взять ";
    out << "максимальное из них; число \"1\" считать делителем ";
    out << "(обычным) любого числа; знак числа цифрой не считать;" << std::endl << std::endl;
 
    // открываем файл для чтения тестовых наборов
    std::ifstream in("file.txt");
    if (!in.is_open()) {
        exit('0');
    }
 
    // из файла считываем в первой строке количество тестовых наборов
    int countTest;
    in >> countTest;
 
    int A, B;
    // Для каждого тестого набора сначала выводим входные данные
    // а затем выводим результат нашей функции
    while (countTest--) {
        in >> A >> B;
 
        out << "Входные данные: " << std::endl;
        out << A << " - A" << std::endl;
        out << B << " - B" << std::endl;
        out << "Результат" << std::endl;
        vector<int> result;
        result = RD(A, B);
        out << result.at(0) << " - число имеющее большее количество "разноделящихся" делителей" << std::endl;
        out << result.at(1) << " - количество различных "разноделящихся" делителей первого числа" << std::endl << std::endl;
    }
}
0
01.10.2020, 08:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.10.2020, 08:35
Помогаю со студенческими работами здесь

Реализуйте эффективный алгоритм сортировки в виде метода класса
Быстрая сортировка (Quick sort) + сортировка выбором для маленьких подмассивов. с вещественными...

Предложить эффективный алгоритм умножения числа на дробь в длинной арифметике
Нам дано длинное натуральное число, представленное в виде динамического массива: 1) разряды...

Следует выбрать эффективный алгоритм (по времени) теста простоты числа
Следует выбрать эффективный алгоритм (по времени) теста простоты числа. На исследование вам дается...

Эффективный алгоритм подсчета расстояний от произвольной вершины до всех стальных вершин в графе
Реализовать в виде программы и исследовать эффективный алгоритм подсчета расстояний от произвольной...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru