Найти три минимальных элемента в предпоследнем столбце матрицы A[n][m]

Ответить
Nех
Сообщения: 3
Зарегистрирован: 10 май 2009, 15:35

Найти три минимальных элемента в предпоследнем столбце матрицы A[n][m]

Код: Выделить всё

#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>

void main()
{
clrscr();
int i,j,n,m,min,min1,min2;
int a[10][10];
cout<<"Введите число строк n= ";
cin>>n;
cout<<"Введите число столбцов m= ";
cin>>m;
cout<<"\nВывод исходной матрицы:\n";
printf("\n\n");
randomize();
for (i=0;i<n;i++) {
for(j=0;j<m;j++) {
a[i][j]=random(10);
printf("%d\t",a[i][j]); }
printf("\n\n");
}                                                                                                     
[B]//---------Нахождение min элементов--------[/B]
min=a[0][0];
for(i=0;i<n;i++)
if (a[i][m-2]<min)
min=a[i][m-2];

min1=a[0][0];
for(i=0;i<n;i++)
if ((a[i][m-2]<min1)&(a[i][m-2]>min))
min1=a[i][m-2];

min2=a[0][0];
for(i=0;i<n;i++)
if ((a[i][m-2]<min2)&(a[i][m-2]>min1))
min2=a[i][m-2];

printf("Min элементы в предпоследнем столбце матрицы=%d,%d,%d\n",min,min1,min2);
getch();
}
В общем проблема в том, что порой выдает совсем левые значение. Было предложение сделать нахождение по индексам, которое опять не к чему не привело. На следующем сайте в конце разобрано что-то подобное, но мною не понято. Может все-таки кто-нибудь подсказать, где ошибка, где что поменять. С одним нахождением мин. нет проблем, а вот с тремя проблемка.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

А продебажить не пробовал, почему левые значения выдаются?
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Rycharg
Сообщения: 28
Зарегистрирован: 15 апр 2009, 14:23
Откуда: SPb

Приветствую.

Код: Выделить всё

if ((a[i][m-2]<min1)[color="Red"]&[/color](a[i][m-2]>min))

if ((a[i][m-2]<min2)[color="Red"]&[/color](a[i][m-2]>min1))
Вы используете битовое "И" (&), а нужно логическое (&&).
Nех
Сообщения: 3
Зарегистрирован: 10 май 2009, 15:35

Аналогично все. В общем я знаю, что нужно сделать, но не знаю как реализовать. Может кто поможет. Нужно отсортировать предпоследний столбик по мин. значениям. И сделать повторения цикла 3 раза. В конце вывод одномерного массива с этими значениями.
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------

Код: Выделить всё

for(i=0;i<n;i++){
min=a[i][m-2];
b[i]=min;
}
 
for(i=0;i<n;i++){
for(u=0;u<n-i-1;u++)
if(b[u]>b[u+1]){
min=b[u];
b[u]=b[u+1];
b[u+1]=min;
   }
}
printf("Минимальные элементы в предпоследнем столбце матрицы\n");
printf("\n");
for(i=0;i<3;i++)
printf("%d\t",b[i]);
getch();
}

Додумался сделать только так. =) Из нужного столбца делаю линейный массив. В нем делаю сортировку, и на выводе условие i<3. Не особо, конечно, грамотно, но работает точно. Если кто оптимизирует, только спасибо. =)
Ответить