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

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

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

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

09.04.2014, 14:36. Просмотров 522. Ответов 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.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.04.2014, 14:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ближайшее число в массива (линейный поиск) (C++):

Объяснить линейный поиск в массиве и сортировка массива - C++
Рябята кому не трудно кто может обяснить линейный поиск в масиве и сортировку масива Не очень понял как на парах обясняли обясните вы...

Дано натуральное число. Найти ближайшее простое число - C++
1. Дано натуральное число. Найти ближайшее простое число. 2. Дано 20 пар однозначных чисел. Первое число каждой пары означает количество...

Программа, которая считывает число с клавиатуры и находит ближайшее справа число, которое является квадратом натурального числа - C++
Написать программу, которая считывает число с клавиатуры и находит ближайшее справа число, которое является квадратом натурального числа, и...

Написать программу, которая считывает число с клавиатуры и находит ближайшее справа число, которое равно сумме кубов своих цифр - C++
Написать программу, которая считывает число с клавиатуры и находит ближайшее справа число, которое равно сумме кубов своих цифр (например: ...

Написать программу, которая вычисляет целую степень, в которую необходимо возвести число 2, чтобы получить число, ближайшее меньшее либо равное числу, - C++
Написать программу, которая вычисляет целую степень, в которую необходимо возвести число 2, чтобы получить число, ближайшее меньшее либо...

Передать в функцию целое число. Функция заменяет его на ближайшее простое число, которое больше или меньше исходного. Вернуться в main( ) и распечатат - C++
Передать в функцию целое число. Функция заменяет его на ближайшее простое число, которое больше или меньше исходного. Вернуться в main( ) и...

10
Student100
3 / 3 / 2
Регистрация: 08.04.2011
Сообщений: 27
09.04.2014, 15:00 #2
и что не работает?
C++
1
2
cin >> x;
    int mas[101];
если х вы берете как размер массива то и выделяйте х памяти а не 101
0
kasadi
0 / 0 / 0
Регистрация: 13.01.2014
Сообщений: 65
09.04.2014, 15:17  [ТС] #3
так, а что скажут люди по опытней?)
0
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;
}
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)?
0
IrineK
Заблокирован
09.04.2014, 15:54 #6
Цитата Сообщение от kasadi Посмотреть сообщение
элементы массива (целые числа, не превосходящие по модулю 1000)
Цитата Сообщение от kasadi Посмотреть сообщение
что ты будешь делать
При таком раскладе модуль разницы не будет превосходить 2000.

Добавлено через 1 минуту
Student100,
на
Цитата Сообщение от Student100 Посмотреть сообщение
int *mas=new int[x];
не забудьте в конце почистить память
C++
1
delete [] mas;
0
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; }
0
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;
}
1
kasadi
0 / 0 / 0
Регистрация: 13.01.2014
Сообщений: 65
09.04.2014, 16:40  [ТС] #9
Спасибо Isprofit, программа хорошо работает с положительными элементами, но вот с отрицательными нет.
0
lsprofit
58 / 58 / 15
Регистрация: 12.02.2014
Сообщений: 108
09.04.2014, 17:38 #10
По-моему, она и на отрицательных работает. Если приведете тест, то я исправлю
0
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;
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.04.2014, 14:54
Привет! Вот еще темы с ответами:

Найти ближайшее число - C++
Среди чисел 1, 1+\frac{1}{2}, 1+\frac{1}{2}+\frac{1}{3}... найти ближайшее к заданому числу b. Помогите пожалуйста...

Определить ближайшее нечетное число - C++
Определить ближайшее нечетное число меньше заданного числа N, которое делится на 15 с остатком 6. код BORLANDC

Массив. Узнать число, ближайшее нулю - C++
#include &lt;iostream&gt; using namespace std; const int size = 5; int main() { int mas; int max = mas;

Найти число ближайшее к какому-нибудь целому - C++
Нужна помощь, вот задача Даны натуральное число n, действительное число х. Среди чисел ,ecos(x2k)sin(x3k) k=1,...,n найти ближайшее к...


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

Или воспользуйтесь поиском по форуму:
11
Yandex
Объявления
10.04.2014, 14:54
Ответ Создать тему
Опции темы

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