Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.09.2015, 11:20   #11
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
if(abs(a[i][j]-a[i][j+2])<min) min=abs(a[i][j]-a[i][j+2]);
А я бы писал так:
Код:
for(int i=0;i<n;i++)  for(int j=0;j<m;j++)
for(int i2=0;i2<n;i2++)  for(int j2=0;j2<m;j2++)
  if(i!=i2 && j!=j2 && abs(a[i][j]-a[i2][j2])<min) 
     min=abs(a[i][j]-a[i2][j2]);
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.09.2015, 11:32   #12
Sasha_Smirnov
Особый статус
Участник клуба
 
Аватар для Sasha_Smirnov
 
Регистрация: 24.11.2008
Сообщений: 1,535
По умолчанию Одним махом

А я, ради спортивного интереса, иногда вставлял расчёт прямо в
Цитата:
Сообщение от Stilet Посмотреть сообщение
код ввода массива
Sasha_Smirnov вне форума Ответить с цитированием
Старый 20.09.2015, 11:39   #13
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
я, ради спортивного интереса, иногда вставлял расчёт прямо в
Ну и правильно делал )
Но в данном случае у ТС есть кое-что, и это "кое что" совсем не плохое, так что можно и по его правилам поиграть.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.09.2015, 12:01   #14
FPaul
Форумчанин
 
Регистрация: 25.01.2015
Сообщений: 472
По умолчанию

Можно ещё сделать так.
1. Представить матрицу массивом через преобразование индексов. Т.е. мысленно обращаясь к массиву B[k], в программе записываем a[k/m][k%m]. И в дальнейшем представляем работу как бы с массивом B.
2. Сортируем "массив" B.
3. Первым проходом ищем минимальную разность среди соседних элементов, т.е. среди B[k] и B[k-1].
4. Вторым проходом выводим найденные числа.

Здесь новшество в представлении матрицы массивом. Плюсы - в упрощении циклов. Минусы - в необходимости преобразования к "истинным" индексам.

Я бы привёл пример, но плохо знаю язык C.
------------------------------------------------------------
Ух-х-х-х... Одолел gcc...
Очень плохо знаю язык. Это просто демонстрация подхода.
Заменил <math.h> на <cmath> - иначе получал "error: 'abs' was not declared in this scope".
Код:
#include <iostream>
#include <cmath>
using namespace std;
int sort(int a[10][10],int n,int m)
{
    for(int i=0; i<n*m-1; i++)
        for(int j=i+1; j<n*m; j++)
        {
            if (a[i/m][i%m]>a[j/m][j%m])
            {
                int tmp;
                tmp=a[i/m][i%m];
                a[i/m][i%m]=a[j/m][j%m];
                a[j/m][j%m]=tmp;
            }
        }
    return 0;
}
int main()
{
    int a[10][10],n,m;
    cout<<"n= ";
    cin>>n;
    cout<<"m= ";
    cin>>m;

    for(int i=0; i<n; i++)
        for(int j=0; j<m; j++)
        {
            cout<<"a["<<(i+1)<<","<<(j+1)<<"]=";
            cin>>a[i][j];
        }

    sort(a,n,m);

    float min=abs(a[0][0]-a[0][1]);
    for(int k=1; k<n*m; k++)
        if(abs(a[k/m][k%m]-a[(k-1)/m][(k-1)%m])<min)
            min=abs(a[k/m][k%m]-a[(k-1)/m][(k-1)%m]);

    for(int k=1; k<n*m; k++)
        if(abs(a[k/m][k%m]-a[(k-1)/m][(k-1)%m])==min)
            cout<<a[k/m][k%m]<<", "<<a[(k-1)/m][(k-1)%m]<<endl;

    return 0;
}

Последний раз редактировалось FPaul; 20.09.2015 в 12:39.
FPaul вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на паскале: Разделить элементы массива на 2 группы так, что бы разность между ними была минимальна. Rhc Помощь студентам 27 31.12.2013 15:04
Найти пары чисел саша аврамов Паскаль, Turbo Pascal, PascalABC.NET 1 20.02.2013 06:54
Нахождение в массиве одинаковой пары соседних чисел mimit Помощь студентам 2 15.11.2012 11:15
Найти номера пары точек, расстояние между которыми наибольшее evgenext Помощь студентам 1 02.07.2010 22:46
Найти номера пары точек, расстояние между которыми наибольшее Nevis Помощь студентам 5 21.06.2009 23:37