• Paranoid - курс по анонимности и безопасности в сети от команды codeby. Защита персональных данных, анонимность в сети интернет, настройка виртуальных машин, безопасная передача данных, анти форензика и еще много всего полезного. Подробнее ...

Задача с массивами

  • Автор темы Rivass
  • Дата начала
Статус
Закрыто для дальнейших ответов.
R

Rivass

#1
Вводится массив целых чисел A размером N, а также целое число K. Вывести зна-чение и индекс элемента массива, наиболее близкого к K.
Как вводить массив, как находить минимум и максимум я разобрался, но тут задачка посложнее.... Пытался сравнивать каждый элемент с К и выбрать тот который ближе, но не получается. Помогите пожалуйста доработать:
C++:
#include<stdio.h>
int a[50],n,i,k,b,p,z;
void main(){
scanf_s ("%d%d",&n,&k); //ввод размера массива n и число k, к которому будем искать ближний
for(i=0;i<n;i++)
scanf_s ("%d",&a[i]);//ввод массива будет производиться пользователем
for(i=0;i<n;i++)
{
//тут я пытался написать код вычисления наиближайшего, но кателок не варит...
}
i=0;
while (a[i]!=b) // тут я нахожу индекс элемента, который будет ближе всех к К
{
i++;
}
printf_s ("%d index=%d\n",b,i);// ну а это вывод...
}
 
R

Rivass

#2
Немного непонятно, тут в вашей программе всё делается рандомно и автоматически, а по заданию нужно чтобы пользователь вводил размер массива, элементы массива, и число К. В массиве программа должна найти элемент, ближайший к К.
Может вы написали этот алгоритм чтобы я понял как искать ближайшее к данному число, но мне не очень понятно как)
Но все равно спасибо что написали)
 
F

flashkpi

#3
По моему небольшая проблема переделать ввод.....
Код:
 for(int i = 0; i < n; i++)
scanf("%d",a[i]);
 
R

Rivass

#4
Со вводом все правильно) Теперь я понял код который написал мне rrrFer и всё получилось)
C++:
#include<stdio.h>
#include<stdlib.h>
int a[50],n,k,i,j;
void main(){
scanf_s ("%d%d",&n,&k); 
for(i=0;i<n;i++)
scanf_s ("%d",&a[i]);
for(j=0,i=1;i<n;i++)
{
if(abs(k-a[j])>abs(k-a[i])) //вот код который найдет ближайший к К элемент.
j=i;
}
i=0;
while (a[i]!=a[j]) //этот код найдет индекс (порядковый номер в массиве от 0 до n)
{
i++;
}
printf_s ("%d index=%d\n",a[j],i);
}
 

DarkKnight

Well-known member
01.08.2010
653
0
#5
Немного непонятно, тут в вашей программе всё делается рандомно и автоматически, а по заданию нужно чтобы пользователь вводил размер массива, элементы массива, и число К.
Rivass, вам было бы понятнее если бы он описал все это через динамику?!, аля:
C++:
int *Arr;
int Size;
printf("Input Array-Size :");
scanf("%i",&Size);
Arr = (int*)malloc(sizeof(int)*Size);
Не правда ли, очень затрудняет понимание?
 
R

Rivass

#6
DarkKnight125
Мне было непонятно из-за того, что рандомные числа рассматривались, а потом немного позже разобрался, аля так, как написали вы, не очень понятно. Не нужно сразу так возмущаться) Я разобрался как видите)
Всем большое спасибо за помощь)
 

DarkKnight

Well-known member
01.08.2010
653
0
#7
Да не, ты не понял :)
Я и не думал возмущатся - просто я к тому, что так как написал rrrFer наиболее понятно для начало и показательно....
А все остальные излишки, только засорят вам мозги....
Я об этом, прошу прощения, что выразился не корректно, что дало вам понять, что я возмутился ;-)
Я просто как раз за то, что бы конечный читатель (автор), смог в коде разобраться, вот и показал вам, что если бы rrrFer, писал как будто для себя, код бы был намного менее читабелен ;-)


Добавлено:
да не, [ТС] в данном случае ввод то сам написал, мне неудобно для тестирования вводить массив каждый раз, поэтому использовал rand();
Думал [TC] сам догадается заменить ввод, ну вобщем он и догадался потом
Да я понил rFer ;-) как раз об этом и писал автору :))
З.Ы. В любом случае лучше рандома нет ничего... Пальцы - это конечно хорошо, н прослеживается постоянство и однотипность ;-)
Вообщем пальцы за кол*цензура*ием процессорского ядра - точно не угонятся ;-)
 
Статус
Закрыто для дальнейших ответов.