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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2018, 18:33   #1
Александр 99
Новичок
Джуниор
 
Регистрация: 07.06.2018
Сообщений: 1
По умолчанию Двумерный Массив

Найти в двумерном массиве ПОЗИЦИЮ элементов, которые одновременно минимальные в строке и столбце
Пытался вот так решить
Код:
#include<iostream>
#include<ctime>
using namespace std;
#define N 3
#define M 3
int main()
{
    setlocale(0, "");
    srand(unsigned(time(NULL)));
    int  n=0;
    int i = 0;
    int j=0;
    int min = 0;
    int mmin=0;
    int A[N][M];
    /*cout << "Введите размер матрицы: ";
    cin >> N >> M;*/
    //int ** A = new int *[N];
    //for (int i = 0; i < N; i++)
    //  A[i] = new int[M];
    
    for (int i = 0; i < N; i++)
        for (int j = 0; j < M; j++)
            A[i][j] = ((rand() % 100));
 
 
    cout << "Початковий масив:" << endl << endl;
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
            cout << A[i][j] << " ";
        cout << endl;
    }
 
    cout << endl;
    /*for (int i = 0; i < N; i++)
        delete[] A[i];
    delete[] A;*/
 
    //обробка
    for (int i = 0; i < N; i++)
    {
 
        if (min > A[i][0])
        {
            min = A[i][0];
            return i;
        }
    }
    for (int j = 1; j < M; j++)
    {
 
        if (mmin > A[0][j])
        {
            mmin = A[0][j];
            return j;
        }
    }
 
 
    for (int i = 0; i < N; i++)
    {
        for (int j = 1; j < M; j++)
        {
            if (min = mmin)
            {
                cout << i;
                cout << j;
            }
        }
    }
    
    
 
    system("pause");
    return 0;
 
}
Александр 99 вне форума Ответить с цитированием
Старый 07.06.2018, 21:46   #2
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Код:
#include<iostream>
#include<ctime>
#include<limits>

#define N 3
#define M 3

int main()
{    
    srand(unsigned(time(NULL)));
    int  n=0;
    int i = 0;
    int j=0;
    int min = 0;
    int mmin=0;
    int A[N][M];
    for (int i = 0; i < N; i++)
        for (int j = 0; j < M; j++)
            A[i][j] = ((rand() % 100));
 
 
    std::cout << "Початковий масив:" << std::endl << std::endl;
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < M; j++)
            std::cout << A[i][j] << " ";
        std::cout << std::endl;
    }
 
    std::cout << std::endl;
    
    for (int j = 0; j < M; ++j)
    {
        int minv = std::numeric_limits<int>::max();
        for (int i = 0; i < N; ++i)
            if (minv > A[i][j])
                minv = A[i][j];
        
        //can be couple same minimal values, like 2,2,2,4,5,6, - need to test all of them
        for (int i = 0; i < N; ++i)
            if (A[i][j] == minv)
            {
                int minv2 = std::numeric_limits<int>::max();
                int minj  = -1;
                for (int k = 0; k < M; ++k)
                    if (A[i][k] < minv2)
                    {
                        minv2 = A[i][k];
                        minj = k;
                    }
                if (minv2 == minv && j == minj)
                {
                    std::cout << "["<<i<<", "<<j<<"] = "<<minv<<std::endl;
                }
            }
    }
   
    return 0; 
}
Цитата:
alex@moy-super:~/Work/tests$ a.out
Початковий масив:

90 54 45
68 87 50
73 88 85

[0, 2] = 45
alex@moy-super:~/Work/tests$ a.out
Початковий масив:

25 77 96
65 20 10
18 59 62

[2, 0] = 18
[1, 2] = 10
alex@moy-super:~/Work/tests$ a.out
Початковий масив:

82 35 87
30 21 98
25 40 41

[2, 0] = 25
[1, 1] = 21
alexzk вне форума Ответить с цитированием
Старый 08.06.2018, 08:57   #3
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Цитата:
Сообщение от alexzk Посмотреть сообщение
Код:
std::cout <<
- а зачем всегда "std" писать? Подскажите, пожалуйста.
Cuprum5 вне форума Ответить с цитированием
Старый 08.06.2018, 09:01   #4
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Цитата:
Сообщение от Cuprum5 Посмотреть сообщение
- а зачем всегда "std" писать? Подскажите, пожалуйста.
Привычка, чтоб не пересекалось с похожими названиями. "Именованые области" (вот это std:: ) именно для этого и придумано, что вы можете иметь, скажем std::cout, abrvalg::cout, eprst::cout и все это будут разные функции. Ну т.е. в самом верху файла писать using namespace std; крайне плохой тон. Терпимо еще в пределах функции, скажем

int main()
{
using namespace std;
}

Дело в том, что в std:: не только cout, а еще сотни всяких других названий...

Вот например https://en.cppreference.com/w/cpp/iterator/size - если написать using, то поимеете проблемы с типа так

int size = 5;

Последний раз редактировалось alexzk; 08.06.2018 в 09:04.
alexzk вне форума Ответить с цитированием
Старый 08.06.2018, 10:12   #5
Cuprum5
Форумчанин
 
Регистрация: 09.05.2017
Сообщений: 729
По умолчанию

Перешел по ссылке и посмотрел. А вот, которое там вот это:
"template < class C >
constexpr auto size( const C& c ) -> decltype(c.size());" - это что, возвращает размер типа в байтах? Наподобие size_of().
Cuprum5 вне форума Ответить с цитированием
Старый 08.06.2018, 17:28   #6
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Цитата:
Сообщение от Cuprum5 Посмотреть сообщение
Перешел по ссылке и посмотрел. А вот, которое там вот это:
"template < class C >
constexpr auto size( const C& c ) -> decltype(c.size());" - это что, возвращает размер типа в байтах? Наподобие size_of().
Там же написано - размер контейнера (ф. size()) или обычного массива, что удобно - вам не нада разбиратся и писать разный код для вектора и массива.
alexzk вне форума Ответить с цитированием
Старый 10.06.2018, 14:45   #7
2Lui
Пользователь
 
Аватар для 2Lui
 
Регистрация: 14.03.2017
Сообщений: 68
По умолчанию

Код:
#include "stdafx.h"
#include <iostream>
#include <windows.h>
#include <conio.h>
#include <time.h>
#pragma warning(disable : 4996)

using namespace std;
int main(void)
{
	srand(time(NULL));
	int rowsCount, columnsCount;
	printf("Enter rows = "); cin >> rowsCount;
	printf("Enter cols = "); cin >> columnsCount;
	int **a = new int*[rowsCount];
//Создаем и заполняем массив рандомом
	for (int i = 0; i < rowsCount; i++) {

		a[i] = new int[columnsCount];
	}
	cout << endl;
	for (int i = 0; i < rowsCount; i++) {
		for (int j = 0; j < columnsCount; j++) {
			int az = rand() % 50;
			int bz = rand() % 100;
			int dl = rand() % 4;
			if (dl <= 0)dl = 1;
			a[i][j] = (az + bz) / dl;
		}
	}
//--------------Вывод матрицы------------
	for (int i = 0; i < rowsCount; i++)
	{
		for (int j = 0; j < columnsCount; j++)
		{
			cout << a[i][j] << '\t';
		}
		cout << endl;
	}
//--------------Находим макс елемент
	bool ok;
	int min = 0;
	for (int i = 0; i < rowsCount; i++) {
		min = 0;
		for (int j = 0; j < columnsCount; j++) {
			if (a[i][j] < a[i][min]) { min = j; ok = true; }
		}
		for (int id = 0; id < rowsCount; id++) {
			if (a[id][min] < a[i][min]) { ok = false; break; }
		}
		if (ok) printf("row = %d col = %d \n", i, min);
	}
	cout << endl;
//--------------Освобождаем память
	for (int i = 0; i < rowsCount; i++) { delete[] a[i]; }
	delete[] a;
	a = 0;
	system("pause");
	return 0;
}

Последний раз редактировалось 2Lui; 10.06.2018 в 14:55.
2Lui вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
передать двумерный массив Variant из VBA в dll C++, передать двумерный массив Variant из VBA в dll C++ и вернуть их после обработки обратно в VBA. maxPo Microsoft Office Excel 0 24.11.2017 17:29
Переписывая все в новый массив,добавить в двумерный массив столбец с заданным номером. anasttb Общие вопросы C/C++ 0 24.05.2017 12:15
Программирование в VBA: двумерный массив M на N, нужно создать новый одномерный массив TheAnnihilyator Помощь студентам 1 04.06.2014 09:16
Java: Дан двумерный массив чисел А размером 6х6 и одномерный массив Х из 6-ти чисел. Заменить первые три строки массива A vikysha55 Помощь студентам 1 16.04.2014 10:50
Двумерный массив развернуть в одномерный массив по строкам[QBASIC] TrueStyle777 Помощь студентам 3 29.05.2013 21:56