Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.71/55: Рейтинг темы: голосов - 55, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 09.03.2014
Сообщений: 14

Для каждого из K чисел выведите в отдельную строку число из первого массива, наиболее близкое к данному

17.07.2014, 12:47. Показов 11101. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание:
В первой строке входных данных содержатся числа N и K (0NK100001). Во второй строке задаются N чисел первого массива, отсортированного по неубыванию, а в третьей строке – K чисел второго массива. Каждое число в обоих массивах по модулю не превосходит 2109.

Для каждого из K чисел выведите в отдельную строку число из первого массива, наиболее близкое к данному. Если таких несколько, выведите меньшее из них.
Пример:

Входные данные:
5 4
1 4 5 8 10
5 6 1 9

Выходные данные:
5
5
1
8

http://informatics.mccme.ru/mo... p?id=192#1 - Это задача


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
#include <iostream>
using namespace std;
const int n = 5 ; //двоичный поиск
int BinarySearch(int a[], int key)
{
    int left = 0, right = n, mid;
    while (left <= right)
    {
        mid = left + (right - left)/2;
        if (key < a[mid]) right = mid-1;
        else if (key > a[mid]) left = mid+1;
        else return mid;
    }
    return -1;
}
//главная функция
void main()
{
    setlocale(LC_ALL,"Rus");
    int i, key, k, n;
    int a[100001], b[100001];
    cin >> n >> k;
    cout<<"Первый массив: ";
    for (i = 0; i < n; i++) //заполнение и вывод массива
    { cin >> a[ i ]; }
    cout<<"Второй массив: ";
    for (int j = 0; j < k; j++){
        cin >> b[ j ];} 
        for ( int j = 0; j < k; j++)   {
            key = b[ j ] ; 
              for ( int i = 0; i < n; i++){ 
    if (BinarySearch(a, key)==-1) cout<<"\nЭлемент не найден";
    else cout<<"\nНомер элемента: "<<BinarySearch(a, key)+1;}}
    system("pause");
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.07.2014, 12:47
Ответы с готовыми решениями:

Для каждого из K чисел выведите в отдельную строку число из первого массива, наиболее близкое к данному
Здравствуйте,помогите пожалуйста написать код,спасибо.Реализуйте алгоритм приближенного бинарного поиска. Входные данные В первой...

Для каждого из K чисел выведите в отдельную строку число из первого массива, наиболее близкое к данному
Формат входных данных В первой строке входных данных содержатся числа N и K (0&lt;N,K&lt;100001 ). Во второй строке задаются N чисел...

Найти число наиболее близкое к заданному для массива 8-разрядных чисел со знаком
Помогите, найти ошибку) format PE console ; 32-разрядная консольная программа WINDOWS EXE entry start ...

28
0 / 0 / 0
Регистрация: 17.07.2014
Сообщений: 4
17.07.2014, 17:35
Студворк — интернет-сервис помощи студентам
Довольно громоздко, но работает
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
#include <iostream>
using namespace std;
 
int main()
{
    unsigned n=0;
    int k=0;
    cout<<"Enter N and K \n";
    cin>>n>>k;
    int massN[n];
    cout<<"Enter "<<n<<" element massN \n";
    for (int i=0;i!=n;i++)
    cin>>massN[i];
    cout<<"\n";
    int massK[k];
    cout<<"Enter "<<k<<" element massK \n";
    for (int i=0;i!=k;i++)
    cin>>massK[i];
    int temp1=0;
    int temp2=0;
    int massOut[k];
    for (int i=0;i!=k;i++)
        massOut[i]=-1;
    for (int i=0;i!=k;i++)
    {
        for(int j=0;j!=n;j++)
        {
            temp2=0;
            if (massK[i]!=massOut[i])
            if (massK[i]==massN[j])
            {
                massOut[i]=massN[j];
            }
            else
            {
                temp1=massK[i]-massN[j];
                if (temp1<0) temp1*=-1;
                if (massOut[i]!=-1)
                {
                    temp2=massK[i]-massOut[i];
                    if (temp2<0) temp2*=-1;
                    if (temp1<temp2) massOut[i]=massN[j];
                    if (temp1==temp2)
                    {
                        if (massN[j]<massOut[i]) massOut[i]=massN[i];
                    }
                }
                else    massOut[i]=massN[j];
            }
        }
    }
    for (unsigned i=0;i!=k;i++)
        cout<<massOut[i]<<" ";
    return 0;
}
P.S. ввод с клавиатуры, ввод из файла сам сделаешь, там не долго.
0
0 / 0 / 0
Регистрация: 09.03.2014
Сообщений: 14
17.07.2014, 23:23  [ТС]
много ошибок...
0
 Аватар для Kuzia domovenok
4268 / 3327 / 926
Регистрация: 25.03.2012
Сообщений: 12,542
Записей в блоге: 1
18.07.2014, 00:07
shatov05, каких конкретно? Ты в ошибках даже не разбираешься, что ли?!!
0
0 / 0 / 0
Регистрация: 17.07.2014
Сообщений: 4
18.07.2014, 01:23
shatov05, В чем же ? Я проверил алгоритм по тестовым данным, проходит, вывод верный.
0
0 / 0 / 0
Регистрация: 09.03.2014
Сообщений: 14
18.07.2014, 15:07  [ТС]
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
#include <iostream>
using namespace std;
const int n = 5 ; //двоичный поиск
int BinarySearch(int a[], int key)
{
    int left = 0, right = n, mid;
    while (left <= right)
    {
        mid = left + (right - left)/2;
        if (key < a[ mid ]) right = mid - 1;
        else if (key > a[ mid ]) left = mid + 1;
        else return mid;
    }
    return -1;
}
//главная функция
void main()
{
    setlocale(LC_ALL,"Rus");
    int i, key, k, n;
    int a[100001], b[100001];
    cin >> n >> k;
    cout<<"Первый массив: ";
    for (i = 0; i < n; i++) //заполнение и вывод массива
    { cin >> a[ i ]; }
    cout<<"Второй массив: ";
    for (int j = 0; j < k; j++){
        cin >> b[ j ];} 
        for ( int j = 0; j < k; j++)   {
            key = b[ j ] ; 
    if (BinarySearch(a, key)==-1) cout<<"\nЭлемент не найден"<< endl;
    else cout<<"\nНомер элемента: "<<a [ BinarySearch(a, key) ] << endl;}
    system("pause");
}
выводит ответ : 5 , не найден, 1, не найден..
0
221 / 166 / 47
Регистрация: 17.07.2012
Сообщений: 587
18.07.2014, 15:16
я не догоняю, вы сейчас какую задачу решаете? ссылка которую ты дал, там другая задача, там надо для каждого числа найти наиболее близкое к нему, а не сказать, есть оно там или нет.
0
0 / 0 / 0
Регистрация: 17.07.2014
Сообщений: 4
18.07.2014, 17:04
shatov05, Ccылку на задачу скидывай правильно. Вот мы тебе и решили ту по которой ссылка, а не ту что хотел.
0
0 / 0 / 0
Регистрация: 09.03.2014
Сообщений: 14
18.07.2014, 22:01  [ТС]
Цитата Сообщение от DarkerSigner Посмотреть сообщение
shatov05, Ccылку на задачу скидывай правильно. Вот мы тебе и решили ту по которой ссылка, а не ту что хотел.
вообще то я правильную ссылку кинул
0
221 / 166 / 47
Регистрация: 17.07.2012
Сообщений: 587
18.07.2014, 22:15
shatov05, так проверь.

C++ (Qt)
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
#include <iostream>
#include <algorithm>
#include <vector>
 
using namespace std;
 
int main()
{
    int n, m;
    scanf("%d %d", &n, &m);
    vector<int> a;
    for(int i = 0; i < n; i++)
    {
        int val;
        scanf("%d", &val);
        a.push_back(val);
    }
 
    for(int p = 0; p < m; p++)
    {
        int val;
        scanf("%d", &val);
        int ans1 = 0, ans2 = 0;
        bool ok1 = false, ok2 = false;
        int it = (lower_bound(a.begin(), a.end(), val) - a.begin());
 
        if(it < a.size())
        {
            ans1 = a[it];
            ok1 = true;
        }
 
        if(it > 0)
        {
            it--;
            ans2 = a[it];
            ok2 = true;
        }
 
        if(ok1 && ok2)
        {
            if(abs(ans1 - val) < abs(ans2 - val))
                printf("%d\n", ans1);
            else
                printf("%d\n", ans2);
        }
        else
            if(ok1)
                printf("%d\n", ans1);
            else
                printf("%d\n", ans2);
    }
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.07.2014, 22:15

Для каждого из K чисел вывести в отдельную строку "YES", если число встречается в первом массиве
Здравствуйте,помогите пожалуйста написать код,спасибо.Реализуйте алгоритм бинарного поиска.Входные данные В первой строке входных данных...

В последовательности из n чисел найдите число, наиболее близкое к "x"
В последовательности из n чисел найдите число, наиболее близкое к x. Если к x одинаково близки два числа, выберите большее из них. К...

Найти наиболее близкое число
Вот такое задание: Есть файлик с числами, пользователь вводит b и x, высчитывается функция, потом из файлика должно выбрать наиболее...

Найти беззнаковое число наиболее близкое к заданному
Напишите пожалуйста программу на Ассемблере. Вот задание: Найти беззнаковое число наиболее близкое к заданному.

Как найти наиболее близкое число в массиве?
Здравствуйте! Есть массив var a = и есть число var b = -620 Как выбрать максимально приближенное число в массиве?


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

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru