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

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

Войти
Регистрация
Восстановить пароль
 
apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
#1

Количество элементов в столбце с максимальным элементом - C++

11.01.2011, 16:22. Просмотров 386. Ответов 8
Метки нет (Все метки)

Есть программа, считает минимальные элементы в строках и затем выбирает среди них максимальный и выводит его индекс (заодно и выводит является ли элемент угловым), необходимо, чтобы она выводила кол-во элементов в столбце, где находится максимальный элемент.

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 <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
#include <stdio.h>
#if defined (_MSC_VER) && _MSC_VER <= 1200
#define for if (false) ; else for
#endif 
 
int main()
{int min,max,i_max,j_max,i,j, n, temp;
        int **matrix, *a;
                std::cout<<"Vvedite kol-vo stolbcov: ";
                cin>>n;
                printf("\n"); 
                matrix=new int*[n];
                a=new int[n];
                for(i=0; i<n; i++)
                {
                        std::cout<<"Dlina "<<i+1<<" stroki =";
                    cin>>temp;
                        matrix[i]=new int[temp];
                        a[i]=temp;
                }
 
                printf("\n"); 
    srand (time (NULL));
    std::cout << "Vvedite matricu:\n";
    for ( i=0; i<n; i++) {
        for ( j=0; j<a[i]; j++) {
            cin>>matrix[i][j];
                        std::cout << std::endl; }}
       
        int *str_min=new int[n];
                                      
        for(int i=0;i<n;i++)
        {
                min=matrix[i][0];
                for(int j=0;j<a[i];j++)
                        if(matrix[i][j]<min)
                                min=matrix[i][j];
                str_min[i]=min;
        }
 
        max=str_min[0];
        for(int i=0;i<n;i++)
                if(str_min[i]>max)
                        max=str_min[i];
 
        
        for(int i=0;i<n;i++)
                for(int j=0;j<a[i];j++)
                        if (matrix[i][j]==max){
                                i_max=i;
                                j_max=j; }
                             printf("Matrica: \n"); 
                             printf("\n"); 
             for(int i=0;i<n;i++)
                 {
                for(int j=0;j<a[i];j++)
                                        printf("%d ", matrix[i][j]);
                                printf("\n");
                 }
 
 printf("\n");
                        printf("i : %d\n",i_max);
                        printf("j : %d\n",j_max); 
                         printf("\n"); 
                        printf("Element : %d\n",matrix[i_max][j_max]);
                    if ((i_max==0 || i_max==n-1) && (j_max==0 || j_max==a[n-1]-1))
printf("Yvlyaetsya uglovim!\n");
else
printf("Ne yvlyaetsya uglovim!\n");
printf("\n"); 
 
        return 0;
}
Добавлено через 31 минуту
В обычной матрице это ессно легко, но с динамическим массивом не знаю как быть
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.01.2011, 16:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Количество элементов в столбце с максимальным элементом (C++):

Найти количество элементов массива, содержащихся между первым и последним максимальным элементом - C++
Здравствуйте! Помогите пожалуйста сделать задачу!!! Дан набор из целых чисел ( числа читаются из файла ). Найти количество...

Найти количество нулей среди элементов массива, расположенных между минимальным и максимальным элементом массива. - C++
Программу по нахождению количества нулевых элементов в массиве составила а как сделать так чтобы они находились именно между макс. и мин....

Определить произведение элементов столбца с максимальным элементом - C++
В матрице определить произведение элементов столбца в котором находиться максимальный элемент. Добавлено через 1 час 0 минут using...

Удалить из массива А(М) элементы, стоящие за первым максимальным элементом, количество цифр которых равно k - C++
Удалить из массива А(М) элементы, стоящие за первым максимальным элементом, количество цифр которых равно k.

вычислить сумму элементов,расположенных между максимальным и минимальным элементом - C++
вычислить сумму элементов,расположенных между максимальным и минимальным элементом (первыми по порядку, если их нескглько) Если вычислить...

Подсчитать среднее арифметическое элементов, расположенных перед максимальным элементом в массиве - C++
Задача: Сформируйте массив из 10 элементов, заполнив его случайными числами от 0 до 50. Найдите последний максимальный элемент в массиве и...

8
valeriikozlov
Эксперт С++
4673 / 2499 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
11.01.2011, 16:38 #2
Вот эту строку вначале:
C++
1
               std::cout<<"Vvedite kol-vo stolbcov: ";
замените на:
C++
1
               std::cout<<"Vvedite kol-vo strok: ";
А то что Вам нужно можно сделать так:
Замените вот этот вывод матрицы на экран:
C++
1
2
3
4
5
6
7
8
printf("Matrica: \n"); 
                                                         printf("\n"); 
                         for(int i=0;i<n;i++)
                 {
                for(int j=0;j<a[i];j++)
                                        printf("%d ", matrix[i][j]);
                                printf("\n");
                 }
На такой вывод (и см. комментарии):
C++
1
2
3
4
5
6
7
8
9
10
11
12
        int col_v_st=0;
        printf("Matrica: \n"); 
        printf("\n"); 
        for(int i=0;i<n;i++)
        {
            if(a[i]>=j_max)
                col_v_st++;
            for(int j=0;j<a[i];j++)
                printf("%d ", matrix[i][j]);
            printf("\n");
        }
        // Теперь в переменной col_v_st  кол-во элементов в столбце, где находится максимальный элемент
1
apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
11.01.2011, 16:54  [ТС] #3
Все равно, если матрица вида

32 44 9 8
1 23
45 32

и если нужный элемент 8, то выводит все равно 3

Добавлено через 21 секунду
а нужно 1
0
valeriikozlov
Эксперт С++
4673 / 2499 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
11.01.2011, 17:02 #4
Цитата Сообщение от apachan Посмотреть сообщение
Все равно, если матрица вида
32 44 9 8
1 23
45 32
Если матрица такая, то среди минимальных по строкам элементов, максимальным является - 32.
Кол-во элементов в столбце где этот элемент расположен равно 3.
Так что все правильно считает.
Попробуйте лучше матрицу:
32 44 9 8
1 23
45 2
Должно выдать 1.
1
apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
11.01.2011, 17:20  [ТС] #5
Я просто к примеру матрицу привел, факт в том что почему-то у меня не выводит 1, если в столбце один элемент

Добавлено через 2 минуты
Может выложите весь код? А то вдруг где нестыковка? =/

Добавлено через 7 минут
Мистика какая-то иногда правильно выводит, иногда нет...
0
valeriikozlov
Эксперт С++
4673 / 2499 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
11.01.2011, 17:24 #6
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
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
#include <stdio.h>
#if defined (_MSC_VER) && _MSC_VER <= 1200
#define for if (false) ; else for
#endif 
 
int main()
{int min,max,i_max,j_max,i,j, n, temp;
        int **matrix, *a;
                std::cout<<"Vvedite kol-vo strok: ";
                cin>>n;
                                printf("\n"); 
                matrix=new int*[n];
                a=new int[n];
                for(i=0; i<n; i++)
                {
                        std::cout<<"Dlina "<<i+1<<" stroki =";
                    cin>>temp;
                        matrix[i]=new int[temp];
                        a[i]=temp;
                }
 
                printf("\n"); 
    srand (time (NULL));
    std::cout << "Vvedite matricu:\n";
    for ( i=0; i<n; i++) {
        for ( j=0; j<a[i]; j++) {
            cin>>matrix[i][j];
                        std::cout << std::endl; }}
       
        int *str_min=new int[n];
                                      
        for(int i=0;i<n;i++)
        {
                min=matrix[i][0];
                for(int j=0;j<a[i];j++)
                        if(matrix[i][j]<min)
                                min=matrix[i][j];
                str_min[i]=min;
        }
 
        max=str_min[0];
        for(int i=0;i<n;i++)
                if(str_min[i]>max)
                        max=str_min[i];
 
        
        for(int i=0;i<n;i++)
                for(int j=0;j<a[i];j++)
                        if (matrix[i][j]==max){
                                i_max=i;
                                j_max=j; }
        int col_v_st=0;
        printf("Matrica: \n"); 
                printf("\n"); 
                for(int i=0;i<n;i++)
                {
                        if(a[i]>=j_max)
                                col_v_st++;
                        for(int j=0;j<a[i];j++)
                                printf("%d ", matrix[i][j]);
                        printf("\n");
                }
 
 printf("\n");
                        printf("i : %d\n",i_max);
                        printf("j : %d\n",j_max); 
                                                 printf("\n"); 
                        printf("Element : %d\n",matrix[i_max][j_max]);
                                        if ((i_max==0 || i_max==n-1) && (j_max==0 || j_max==a[n-1]-1))
printf("Yvlyaetsya uglovim!\n");
else
printf("Ne yvlyaetsya uglovim!\n");
printf("\n"); 
printf("Kolichestvo element v stolbce: %d\n",col_v_st);
 
        return 0;
}
1
apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
11.01.2011, 17:32  [ТС] #7
Да все равно:

23 43 32 43 9
1 2 3 2
1 2 3
2 3
2

ответ 9
кол-во 2

хоть ты тресни
0
valeriikozlov
Эксперт С++
4673 / 2499 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
11.01.2011, 17:39 #8
apachan, Была ошибка.
Строки:
C++
1
2
                        if(a[i]>=j_max)
                                col_v_st++;
заменить на:
C++
1
2
                        if(a[i]>j_max)
                                col_v_st++;
1
apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
11.01.2011, 19:17  [ТС] #9
Вот где была собака зарыта, спасибо, работает.
0
11.01.2011, 19:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2011, 19:17
Привет! Вот еще темы с ответами:

Подсчитать сумму элементов, расположенных между максимальным и минимальным элементом массива - C++
1)Подсчитать сумму элементов, расположенных между максимальным и минимальным элементами (минимальный и максимальный элементы в массиве...

Массив: Определить разницу между максимальным элементом и суммой всех элементов. - C++
случайным образом задать 8 чисел массива. Определить разницу между максимальным элементом и суммой всех элементов. С++

Замена всех элементов матрицы над главной диагональю максимальным элементом - C++
1.ввести матрицу 2.найти максимальный элемент 3.заменить все элементы матрицы выше главной диагонали максимальным элементом ...

Вывести на экран номера всех элементов массива, не совпадающих с максимальным элементом - C++
Помогите решить используя одномерный массив) Дана последовательность из n действительных чисел. Вывести на экран номера всех элементов,...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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