С Новым годом! Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
3 / 3 / 1
Регистрация: 04.11.2013
Сообщений: 285

В двумерном массиве найти наибольший элемент тех строк, где все элементы различны

13.12.2016, 18:15. Показов 1579. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дан двумерный массив. Найти наибольший элемент тех строк, в которых все элементы различны.

все дело происходит в функции ras (41-80)
Все нормально считает, но вот что брать за max???
Если брать просто первый элемент всего массива, то если в первой строке есть повторы, то он все равно останется самым большим элементов, что неверно по условию.
Если брать 0 - то если массив будет состоять только из отрицательных элементов, то опять же, 0 будет останется максимальным, если даже его не было в массиве.

Как поступить в данном случае???

Кликните здесь для просмотра всего текста

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
84
85
#include <stdio.h>
#include <conio.h>
 
//int a[10][10];
//int n, m;
 
void vvod(int a[10][10], int *, int *);
int ras(int a[10][10], int *, int *);
void vivod(int);
 
int main(void)
{
    int k, n, m, a[10][10];
    vvod(a, &n, &m);
    k = ras(a, &n, &m);
    vivod(k);
    
    getch();
    return 0;
}
 
void vvod (int a[10][10], int *n, int *m)
{
    int i,j;
    *n = 0;
    *m = 0;
    printf ("Vvedite razmernost massiva (n,m):\n");
        scanf ("%d %d", n, m);
        /*
        pochemy esli vishe postavit & - &n , &m
         to ne budet rabotat????
        */
    printf ("Vvedite elementi massiva:\n");
        for (i=0; i<*n; i++) {
            for (j=0; j<*m; j++) {
                scanf("%d", &a[i][j]);
            }
        }
}
 
int ras(int a[10][10], int *n, int *m)
{
   int i, j, jj, p, max, max_prom, p2;
   max = 0;
   for (i=0; i<*n; i++)
   {
    p = 0; // schetchik povtor. chisel
    p2 = 0; //metka, esli v stoke est povtori
    max_prom = a[i][0];
       for (j=0; j<*m; j++)
       {
        
            for (jj = 0; jj<*m; jj++)
            {
                if (a[i][j] == a[i][jj]) p++;
                if (a[i][j] > max_prom) max_prom = a[i][j];
            }
            
            if (p == 1) //esli vstretilsya tolko etot element napr a[1][1] == a[1][1]
                p = 0;
 
    
            if (p > 1)
                {
                    p2 = 1;
                    break;   //esli vstretilos bolshe, napr. : a[1][1] = a[1][3]
                }
       }
 
      if (p2 != 1)
       {
        if (max_prom > max) 
            max = max_prom;
       }
       
       
   }
 
   return max;
}
 
void vivod (int a)
{
    printf("Max = %d", a);
}


Добавлено через 37 минут
пока решил данную проблему тем, что за переменной max (44 строка) присвоил самое маленькое значение для int = -2147483648
тогда все работает верно. Но как обойтись без этого?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.12.2016, 18:15
Ответы с готовыми решениями:

Найти в двумерном массиве наибольший элемент и его индексы
Найти в двумерном массиве наибольший эл-ент и его индексы Заранее спасибо))

Найти количество строк матрицы, все элементы которых различны
Знаю легкое, но что-то не получается...помогите. Дана целочисленная матрица размера М × Н. Найти количество ее строк, все элементы...

В двумерном массиве все элементы, стоящие выше максимального элемента, заменить на минимальный элемент
Помогите найти ошибки, пожалуйста. Условие задачи: В двумерном массиве все элементы, стоящие выше максимального элемента, заменить...

4
 Аватар для matveev1512
53 / 43 / 22
Регистрация: 29.05.2016
Сообщений: 214
13.12.2016, 18:46
Цитата Сообщение от Frip Посмотреть сообщение
int ras(int a[10][10], int *n, int *m)
Цитата Сообщение от Frip Посмотреть сообщение
vvod(a, &n, &m);
от этих строк голова кругом
Поясните что вы тут делаете?

Добавлено через 54 секунды
Цитата Сообщение от Frip Посмотреть сообщение
void vvod (int a[10][10], int *n, int *m)
и тут

Добавлено через 1 минуту
Цитата Сообщение от Frip Посмотреть сообщение
void vvod (int a[10][10], int *n, int *m)
чем эта строка отличается от этой
C
1
void vvod (int a[10][10], int &n, int &m)
1
3 / 3 / 1
Регистрация: 04.11.2013
Сообщений: 285
13.12.2016, 19:03  [ТС]
matveev1512,
прототипы и функции же
0
738 / 543 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
13.12.2016, 19:27
Лучший ответ Сообщение было отмечено Frip как решение

Решение

можно так
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    int max_line, max_total, flagFirstLine = 0, flag = 0;
    for(i = 0; i < N; i++){
        for(j = 0; j < M; j++){
            if(not_repeat(A[i])){//not_repeat-функция возвращающая 1 если нет повторов в строке
                flag = 1;
                if(!j)
                    max_line = A[i][j];
                if(A[i][j] > max_line)
                    max_line = A[i][j];
            }
        }
        if(!flagFirstLine && flag){
            max_total = max_line;
            flagFirstLine = 1;
        }
        if(max_line > max_total)
            max_total = max_line;
    }
Добавлено через 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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N 7
#define M 9
int not_repeat(int*);
int main()
{
    int max_line, max_total, flagFirstLine = 0, flag = 0, i, j, A[N][M];
    srand(time(NULL));
    for(i = 0; i < N; i++, putchar('\n'))
        for(j = 0; j < M; j++)
            printf("%4d", A[i][j] = rand() % 200 - 100);
    for(i = 0; i < N; i++){
        for(j = 0, flag = 0; j < M; j++){
            if(not_repeat(A[i])){
                flag = 1;
                if(!j)
                    max_line = A[i][j];
                if(A[i][j] > max_line)
                    max_line = A[i][j];
            }
        }
        if(flag)
            printf("Line %d not repeat max line is %d \n", i, max_line);
        if(!flagFirstLine && flag){
            max_total = max_line;
            flagFirstLine = 1;
        }
        if(max_line > max_total)
            max_total = max_line;
    }
    printf("\nMax total = %d\n", max_total);
    return 0;
}
int not_repeat(int* arr)
{
    int *i, *j;
    for(i = arr; i < arr + M - 1; i++)
        for(j = i + 1; j < arr + M; j++){
            if(*i == *j)
                return 0;
        }
    return 1;
}
1
 Аватар для matveev1512
53 / 43 / 22
Регистрация: 29.05.2016
Сообщений: 214
13.12.2016, 20:55
Frip, я про аргументы. В чем отличие?
C
1
void vvod (int a[10][10], int &n, int &m)
от
C
1
void vvod (int a[10][10], int *n, int *m)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.12.2016, 20:55
Помогаю со студенческими работами здесь

Дана целочисленная матрица размера n × m. Найти количество ее строк, все элементы которых различны
Решите задачи данной группы, оформив решение в виде процедур генерации, вывода и обработки массивов. Предусмотрите в процедуре генерации ...

Найти все парные элементы в двумерном массиве и сложить их
Добрый вечер! Подскажите пожалуйста каким образом можно реализовать следующую задачу. Необходимо найти все парные элементы в двумерном...

В заданном массиве A(N) все элементы которого попарно различны, найти наименьший элемент из положительных
В заданном массиве A(N) все элементы которого попарно различны, найти наименьший элемент из положительных

В заданном массиве A(N), все элементы которого попарно различны, найти: наименьший элемент из положительных
В заданном массиве A(N), все элементы которого попарно различны, найти: наименьший элемент из положительных

Дана действительная квадратная матрица порядка n, все элементы которой различны. Найти наибольший элемент среди стоящих на главной и побочной диаг
Дана действительная квадратная матрица порядка n, все элементы которой различны. Найти наибольший элемент среди стоящих на главной и...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru