Форум программистов, компьютерный форум CyberForum.ru

Даны два неубывающих массива X=(xi),i=1.n, n<=10, и Y=(yi),i=1.m, m<=10 и число q. Найти сумму вида (x(i)+y(j), наиболее близкую к числу q - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Проблемы кода http://www.cyberforum.ru/cpp-beginners/thread674662.html
Добрый день! Вопрос предельно прост, перечислите, пожалуйста все проблемы данного кода class Foo { public: Foo(int j) { i=new int; } ~Foo() { delete i; } private: int* i;
C++ Разработать макрос и функцию 1.)Разработайте макрос isalnumrus(c) , который проверяет, принадлежит ли символ c множеству цифр и русских букв. 2.) Разработайте функцию, которая находит последнее вхождение заданного символа в дисковом файле. Имя файла задано в командной строке http://www.cyberforum.ru/cpp-beginners/thread674659.html
C++ Найти сумму элементов массива, стоящих на четных местах
найти сумму элементов массива стоящих на четных местах
Попадет ли точка с заданными координатами в заштрихованную область C++
Помогите пожалуйста с прогой Написать программу, позволюющую определить, попадет ли точка с заданными координатами в заштрихованную область: Задание 2. Написать программу, позволюющую определить, попадет ли точка с за-данными координатами в заштрихованную область: Помогите, как написать если эта точка не входит писать что не входит? вот код на текущий момент #include <iostream> #include...
C++ Возникли трудности с функцией! http://www.cyberforum.ru/cpp-beginners/thread674646.html
Нужно написать программу с помощью рекурсивной функции! У не могу написать рекурсивную функцию к задаче кто может помогите: !!!Вычислить y = xn по следующему правилу: y = ( xn/2 )2, если n четное и y = x  yn–1, если n нечетное. С помощью рекурсивной функции пожалуйста хотя бы пример наведите как оформить рекурсивную функцию к этой задачи!
C++ Хеш функция Здравствуйте. Помогите с задачей. Таблица строиться по методу цепочек с использованием хэш-функции, возращающий код первой буквы идентификатора. При выполнений программы подсчитывается число коллизий. подробнее

Показать сообщение отдельно
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
25.10.2012, 23:44     Даны два неубывающих массива X=(xi),i=1.n, n<=10, и Y=(yi),i=1.m, m<=10 и число q. Найти сумму вида (x(i)+y(j), наиболее близкую к числу q
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
/*
Даны два неубывающих массива X=(xi),i=1..n, n<=10, и Y=(yi),i=1..m, m<=10 и число q.
Найти сумму вида (x(i)+y(j)), наиболее близкую к числу q. (Число действий порядка m+n,
дополнительная память - фиксированное число целых переменных, сами массивы менять не разрешается.)
*/
 
#include <iostream>
#include <algorithm>
 
const int N = 10;
const int M = 8;
 
int getRand(void) { return rand() % 10; }
 
int main(void)
{
    setlocale(0, "rus");
    int X[N];
    int Y[M];
    // генерируем массивы
    std::generate(X, X + N, getRand);
    std::generate(Y, Y + M, getRand);
    // делаем их неубывающими
    std::sort(X, X + N);
    std::sort(Y, Y + M);
 
    std::cout << "Массив X: ";
    std::copy(X, X + N, std::ostream_iterator<int>(std::cout, " "));
    std::cout << '\n';
    std::cout << "Массив Y: ";
    std::copy(Y, Y + M, std::ostream_iterator<int>(std::cout, " "));
    std::cout << '\n';
 
    std::cout << '\n';
    int q = 0;
    std::cout << "Введите: q = ";
    std::cin >> q;
 
    int minDistance = q / 2;
    int minI = N, minJ = M;
    for (int i = 1; i < N; ++i)
    {
        if ((X[i - 1] <= minDistance) && (X[i] >= minDistance))
        {
            minI = i;
            break;
        }
    }
    for (int j = 1; j < M; ++j)
    {
        if ((Y[j - 1] <= minDistance) && (Y[j] >= minDistance))
        {
            minJ= j;
            break;
        }
    }
 
    std::cout << "Решение: " << "X[" << minI << "] + Y[" << minJ << "] = " << X[minI] + Y[minJ] << std::endl;
    system("pause");
}
Ну как-то так, но всё равно это несовершенный алгоритм. При нечётных числах не находит точного совпадения. Нужно дорабатывать.

Добавлено через 1 минуту
Цитата Сообщение от Liveral486 Посмотреть сообщение
Я просто сейчас вообще ничего не соображаю, даже элементарных вещей не понимаю.
Тогда ложись спать. На свежую голову решения эффективнее приходят.

Добавлено через 10 минут
Пока из видимы улучшений: сравнивать не просто "больше предыдущего, меньше текущего", а вычислять разницу с предыдущим и с текущим и брать ту i, где эта разница наименьшая. Делить не на 2, а как уже говорил, на какое-нибудь более "информативное" число. Наверное, для minDistance взять тип double и сравнивать вместе с дробной частью. И т.д...
 
Текущее время: 20:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru