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

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

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

Лидирующие минимумы - C++

19.10.2009, 20:46. Просмотров 468. Ответов 6
Метки нет (Все метки)

Помогите, пожалуйста, решить задачу про "Лидирующие минимумы":

Есть матрица n*n(вводится с клавиатуры)найти ряд из n лидирующих минимумов при условии, что в каждой строке и каждом столбце может быть только один минимум. Для этого можно использовать такое правило: первый минимум - это минимальный элемент матрицы. При поиске следующего минимума соответствующая строка или столбец матрицы не учитывается и т.д. Для реализации этого алгоритма можно использовать два флаговых массива(для строк и столбцов) Функции использовать нельзя((

Добавлено через 5 минут
У меня, вроде, получилось решить данную задачу для n=3, но нужно ведь для любого((
Может кому поможет:

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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include "stdafx.h"
#include <iostream>
using namespace std;
const int n=3;
void main()
{
 
    int mas[n][n], right[n]={0}, down[n]={0};
 
    for (int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            cin>>mas[i][j];
        }
    }
 
 
    int min1=mas[0][0];
    for (int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            if(min1>mas[i][j])
            { 
            min1=mas[i][j];
            right[i]=1;
            down[j]=1;
            
            }
            
        }
        
    }
    cout<<"min1 = " << min1<<endl;
 
    int min2=mas[1][1];
    for (int i=1;i<n;i++)
    {
        for(int j=1;j<n;j++)
        {
            if((right[i]!=1)||(down[j]!=1))
            {
                if((min2>min1)&&(min2>mas[i][j]))
                {
                    min2=mas[i][j];
                    right[i]=1;
                    down[j]=1;
                    
                };
            }}}
    cout <<"min2 = "<< min2<<endl;
 
 
    int min3=mas[n-2][n-2];
 
    for (int i=2;i<n;i++)
    {
        for(int j=2;j<n;j++)
        {
            if((right[i]!=1)||(down[j]!=1))
            {
                if((min3>min2)&&(min3>mas[i][j]))
                {
                    min3=mas[i][j];
                    //right[i]=1;
                    //down[j]=1;
                };
            }}}
    cout <<"min3 = "<< min3<<endl;
    
    
    
cin.get();
cin.get();
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.10.2009, 20:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Лидирующие минимумы (C++):

Как удалить лидирующие нули? - C++
Программа разворачивает числа, нужно сделать так, что бы лидирующие нули после переворота убирались, не знаю как :( : #include...

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

Реализовать функцию, удаляющую в строке лидирующие и концевые пробелы - C++
Удаляет в строке лидирующие и концевые пробелы. Возвращает указатель на преобразованную строку. Пишу впервые на С++ #include &quot;stdafx.h&quot;...

Написать функцию, удаляющую лидирующие и заключительные пробелы и символы табуляции - C++
Написать функцию, удаляющую лидирующие и заключительные пробелы и символы табуляции.

Написать функцию, удаляющую лидирующие и заключительные пробелы и символы табуляции - C++
Написать функцию, удаляющую лидирующие и заключительные пробелы и символы табуляции Используя только библиотеку #include &lt;stdio.h&gt;

Функция с указателем и индексом(Удаляет в строке лидирующие пробелы. Возвращает указатель на преобразованную строку.) - C++
Ребята помогите зачет получить, на парах не был..( Написать следующие функции в двух вариантах: с использованием индексов и...

6
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
19.10.2009, 21:16 #2
алтернативный вариант

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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// Помогите, пожалуйста, решить задачу про "Лидирующие минимумы":
// Есть матрица n*n(вводится с клавиатуры)найти ряд из n лидирующих минимумов 
// при условии, что в каждой строке и каждом столбце может быть только один минимум. 
// Для этого можно использовать такое правило: первый минимум - это минимальный 
// элемент матрицы. При поиске следующего минимума соответствующая строка или 
// столбец матрицы не учитывается и т.д. Для реализации этого алгоритма можно 
// использовать два флаговых массива(для строк и столбцов)                                 
#include <iostream>
#include <limits.h>
 
using namespace std;
 
int main()
{
    int n, minTemp=INT_MAX, minCol, minRow, maxTemp=INT_MIN;
    cout<<"Enter size array: "<<endl; cin>>n;
    cout<<"Enter elements array:"<<endl;
    
    int **array = new int* [n];
    
    for(int col=0;col<n;col++)
    {
        array[col] = new int [n];
        for(int row=0;row<n;row++)
        {
            cout<<"array["<<col<<"]["<<row<<"]=";
            cin>>array[col][row];
 
            if (array[col][row]<minTemp)
            {
                minTemp=array[col][row];
                minRow=row; minCol=col;
            }
            if (array[col][row]>maxTemp)  // заодно ищём максимальный
                maxTemp=array[col][row];
        }
        cout<<endl;
    }
    cout<<endl;
    // вывод удобно смотреть 
    for(int row=0;row<n;row++)  
    {
        for(int col=0;col<n;col++)
            cout<<" "<<array[col][row];
        cout<<endl;
    }
        ++maxTemp;
    // выводим первый минимум
    cout<<"Minimum["<<minCol<<"]["<<minRow<<"]: "<<minTemp<<endl;
 
 
    for (int i=0; i<n-1; i++)
    {
        // маркируем найденный столбец и строку
        for(int row=0;row<n;row++)
            array[minCol][row]=maxTemp;
        for(int col=0;col<n;col++)
            array[col][minRow]=maxTemp;
 
        minTemp=INT_MAX;
        for(int row=0;row<n;row++)
            for(int col=0;col<n;col++)
                if (array[col][row]<minTemp)
                {
                    minTemp=array[col][row];
                    minRow=row; minCol=col;
                }
 
        cout<<"Minimum["<<minCol<<"]["<<minRow<<"]: "<<minTemp<<endl;
    }
    
 
        
    cout<<endl;
    system("PAUSE");
    return 0;
}
 
 
void array(float c[4][2], float d[2])
{
 
}
1
valeriikozlov
Эксперт С++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
19.10.2009, 21:27 #3
РАз уж написал, то покажу:
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
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <iostream.h>
#include <windows.h>
int **mas, n, i,j, min, i1, j1;
bool *str, *stol, temp;
int main ()
{
    SetConsoleCP(1251);
        SetConsoleOutputCP(1251);
    cout<<"Ââåäèòå Г§Г*Г*Г·ГҐГ*ГЁГҐ n: "<<endl;
    cin>>n; 
    mas=new int*[n]; 
    for(i=0; i<n; i++)
       mas[i]=new int[n];
    cout<<"Ââåäèòå ýëåìåГ*ГІГ» Г¬Г*Г±Г±ГЁГўГ*"<<endl;
    for(i=0; i<n; i++)
       for(j=0; j<n; j++)
       {
           cout<<"["<<i<<"]["<<j<<"] = ";
           cin>>mas[i][j];
       }
       cout<<"ÈñõîäГ*ûé Г¬Г*Г±Г±ГЁГў: "<<endl;
       for(i=0; i<n; i++)
       {
            for(j=0; j<n; j++)
                cout<<mas[i][j]<<" ";
            cout<<endl;
       }
       str=new bool[n];
       stol=new bool[n];
       for(i=0; i<n; i++)
           str[i]=stol[i]=true;
    cout<<"Ëèäèðóþùèå ñèìâîëû: "<<endl;
    temp=true;
    while(temp)
    {
        temp=false;
        for(i=0; i<n; i++)
            for(j=0; j<n; j++)
                if(str[i]==true && stol[j]==true && temp==false)
                {
                    min=mas[i][j];
                    i1=i;
                    j1=j;
                    temp=true;
                    break;
                }
        for(i=0; i<n; i++)
            for(j=0; j<n; j++)
                if(mas[i][j]<min && str[i]==true && stol[j]==true)
                {
                    min=mas[i][j];
                    i1=i;
                    j1=j;
                }
        if(temp)
        {
            cout<<min<<endl;
            str[i1]=stol[j1]=false;
        }
    }
    return 0; 
}
1
fmonkey1111
0 / 0 / 0
Регистрация: 19.10.2009
Сообщений: 3
19.10.2009, 23:20  [ТС] #4
TanT, спасибо, но функции использовать нельзя((
А так супер!Если не секрет, сколько ты с++ учишь?

Добавлено через 1 час 39 минут
valeriikozlov, спасибо все круто!
только не мог бы объснить, что значат эти строчки:

**mas

SetConsoleCP(1251);
SetConsoleOutputCP(1251);
0
valeriikozlov
Эксперт С++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
20.10.2009, 06:19 #5
C++
1
**mas
объявлям переменную mas, которая является указателем на массив указателей (она нужна в дальнейшем для создания динамически двумерного массива)

C++
1
2
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
Про эти строки лучше почитай здесь
Русские шрифты в консоли
Эти две строки
1
TanT
эволюционирую потихоньку
465 / 463 / 43
Регистрация: 30.06.2009
Сообщений: 1,399
20.10.2009, 06:34 #6
Цитата Сообщение от fmonkey1111 Посмотреть сообщение
TanT, спасибо, но функции использовать нельзя((
А так супер!Если не секрет, сколько ты с++ учишь?
если ты про
C++
1
2
3
4
void array(float c[4][2], float d[2])
{
 
}
то это опечатка, от старой проги осталось, тебе не к чему. функций там нет.
С++ учу второй год, интересно, затягивает. хотя теорию грызть иногда утомительно.
0
fmonkey1111
0 / 0 / 0
Регистрация: 19.10.2009
Сообщений: 3
20.10.2009, 07:41  [ТС] #7
Ааааа, тогда спасибо огромное, а то мне на контрольной эта задача попалась и я ее завалил, так хоть разобрался как))
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.10.2009, 07:41
Привет! Вот еще темы с ответами:

Максимумы и минимумы - C++
U= max(z,min(y,x))-как это сделать в Delphi и что это такое?

Максимумы и минимумы. Векторы - C++
1). Дано целое число N из целых чисел. Найти номера первого и последнего максимального элемента из данного набора и вывести их в указанном...

Локальные минимумы матрицы - C++
Элемент матрицы называется локальным минимумом, если он строго меньше всех имеющихся у него соседей.Подсчитать количество локальных...

Найти максимумы и минимумы функции - C++
НАйти и заполнить в массиве Z все максимумы и минимумы функции ,эксрим. значения X заполнить в массиве W y = a*exp(-b*x)*cos(w*x + f); ...


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

Или воспользуйтесь поиском по форуму:
7
Yandex
Объявления
20.10.2009, 07:41
Ответ Создать тему
Опции темы

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