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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
kasadi
0 / 0 / 0
Регистрация: 13.01.2014
Сообщений: 65
#1

Ближайшее число в массива (линейный поиск) - C++

09.04.2014, 14:36. Просмотров 455. Ответов 10
Метки нет (Все метки)

Нужно найти ближайшее число в массиве.
Собственно говоря мой код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
int main(){
    int x, y; int count = 0, index, min;
 
    cin >> x;
    int mas[101];
    for (int i = 0; i < x; i++) {
        cin >> mas[i];
    }
    cin >> y;
    index = mas[0];
    for (int i = 0; i < x; i++){
        if (abs(mas[i] - y)<index){ index = mas[i]; min = i; }
 
 
    }
    cout << min;
 
    return 0;
}
Оригинальный текст:В первой строке задается одно натуральное число N, не превосходящее 1000 – размер массива.

Во второй строке содержатся N чисел – элементы массива (целые числа, не превосходящие по модулю 1000).

В третьей строке вводится одно целое число x, не превосходящее по модулю 1000.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2014, 14:36     Ближайшее число в массива (линейный поиск)
Посмотрите здесь:
C++ Объяснить линейный поиск в массиве и сортировка массива
C++ Дано натуральное число. Найти ближайшее простое число
C++ Программа, которая считывает число с клавиатуры и находит ближайшее справа число, которое является квадратом натурального числа
C++ Написать программу, которая считывает число с клавиатуры и находит ближайшее справа число, которое равно сумме кубов своих цифр
Написать программу, которая вычисляет целую степень, в которую необходимо возвести число 2, чтобы получить число, ближайшее меньшее либо равное числу, C++
C++ Передать в функцию целое число. Функция заменяет его на ближайшее простое число, которое больше или меньше исходного. Вернуться в main( ) и распечатат
C++ Найти ближайшее число
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Student100
3 / 3 / 2
Регистрация: 08.04.2011
Сообщений: 27
09.04.2014, 15:00     Ближайшее число в массива (линейный поиск) #2
и что не работает?
C++
1
2
cin >> x;
    int mas[101];
если х вы берете как размер массива то и выделяйте х памяти а не 101
kasadi
0 / 0 / 0
Регистрация: 13.01.2014
Сообщений: 65
09.04.2014, 15:17  [ТС]     Ближайшее число в массива (линейный поиск) #3
так, а что скажут люди по опытней?)
Student100
3 / 3 / 2
Регистрация: 08.04.2011
Сообщений: 27
09.04.2014, 15:27     Ближайшее число в массива (линейный поиск) #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
int main(){
    int x, y; int count = 0, index, min;
 
    cin >> x;
    int *mas=new int[x];
    for (int i = 0; i < x; i++) {
        cin >> mas[i];
    }
    cin >> y;
    index = 9999;
    for (int i = 0; i < x; i++){
        if (abs(mas[i] - y)<index){ index = mas[i]; min = i; }
 
 
    }
    cout << min;
 
    return 0;
}
kasadi
0 / 0 / 0
Регистрация: 13.01.2014
Сообщений: 65
09.04.2014, 15:36  [ТС]     Ближайшее число в массива (линейный поиск) #5
Нет, не правильно работает (можете сами проверить, введите 5,1 2 4 5 6, 3)
А насчет переменной index, что ты будешь делать если массивы превышают его (например 100500), а переменная y ровна какой нибуть маленькой цифре (например 0)?
IrineK
Заблокирован
09.04.2014, 15:54     Ближайшее число в массива (линейный поиск) #6
Цитата Сообщение от kasadi Посмотреть сообщение
элементы массива (целые числа, не превосходящие по модулю 1000)
Цитата Сообщение от kasadi Посмотреть сообщение
что ты будешь делать
При таком раскладе модуль разницы не будет превосходить 2000.

Добавлено через 1 минуту
Student100,
на
Цитата Сообщение от Student100 Посмотреть сообщение
int *mas=new int[x];
не забудьте в конце почистить память
C++
1
delete [] mas;
Student100
3 / 3 / 2
Регистрация: 08.04.2011
Сообщений: 27
09.04.2014, 16:09     Ближайшее число в массива (линейный поиск) #7
C++
1
if (abs(mas[i] - y)<index){ index = mas[i]; min = i; }
вот здесь нифига не айс
надо так
C++
1
2
3
int r;
r=abs(mas[i] - y;
if (r<index){ index = r; min = i; }
lsprofit
58 / 58 / 15
Регистрация: 12.02.2014
Сообщений: 108
09.04.2014, 16:25     Ближайшее число в массива (линейный поиск) #8
так работает
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
#include <iostream>
#include <conio.h>
using namespace std;
int main(){
    int x, y; int count = 0, index, min;
 
    cin >> x;
    int mas[101];
    for (int i = 0; i < x; i++) {
        cin >> mas[i];
    }
    cin >> y;
    index = abs(mas[0] - y);
    min = 0;
    for (int i = 1; i < x; i++){
        if (abs(mas[i] - y)<index){ index = abs(mas[i] - y); min = i; }
 
 
    }
    cout << min;
 
    getch();
    return 0;
}
kasadi
0 / 0 / 0
Регистрация: 13.01.2014
Сообщений: 65
09.04.2014, 16:40  [ТС]     Ближайшее число в массива (линейный поиск) #9
Спасибо Isprofit, программа хорошо работает с положительными элементами, но вот с отрицательными нет.
lsprofit
58 / 58 / 15
Регистрация: 12.02.2014
Сообщений: 108
09.04.2014, 17:38     Ближайшее число в массива (линейный поиск) #10
По-моему, она и на отрицательных работает. Если приведете тест, то я исправлю
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.04.2014, 14:54     Ближайшее число в массива (линейный поиск)
Еще ссылки по теме:
C++ Определить ближайшее нечетное число
C++ Массив. Узнать число, ближайшее нулю
Определить ближайшее простое число, меньше заданного C++
C++ Найти число ближайшее к какому-нибудь целому
C++ Определить ближайшее число меньше заданного числа N

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

Или воспользуйтесь поиском по форуму:
kasadi
0 / 0 / 0
Регистрация: 13.01.2014
Сообщений: 65
10.04.2014, 14:54  [ТС]     Ближайшее число в массива (линейный поиск) #11
Ну во первых, программа должна выводить элемент массива, а не его индекс.
Я это исправил
C++
1
2
3
4
for (int i = 1; i < x; i++){
        if (abs(mas[i] - y)<index){ index = abs(mas[i] - y); min = mas[i]; }
    }
    cout << min;
ТЕСТ: Ввод 5, -2 -3 -5 -10 -8, 4 Вывод 0

Добавлено через 20 часов 30 минут
Все сделал, вот код. Может кому понадобится
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
using namespace std;
int main(){
    int x, y; int count = 0, index, min;
 
    cin >> x;
    int mas[101];
    for (int i = 0; i < x; i++) {
        cin >> mas[i];
    }
    cin >> y;
    index = abs(mas[0] - y);
    min = mas[0];
    for (int i = 1; i < x; i++){
        if (abs(mas[i] - y)<index){ index = abs(mas[i] - y); min = mas[i]; }
 
 
    }
    cout << min;
    return 0;
}
Yandex
Объявления
10.04.2014, 14:54     Ближайшее число в массива (линейный поиск)
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru