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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2018, 18:03   #1
1i10
 
Регистрация: 31.10.2018
Сообщений: 9
По умолчанию [C++] определить номер столбца, где располагается наибольшая серия одинаковых элементов C++

Не получается выполнить вторую часть задания, где нужно определить номер столбца с наибольшей серией одинаковых элементов. Подскажите как исправить?
Код:
#include "pch.h"
#include <iostream>
using namespace std;
 
int main()
{
    setlocale(0, "rus");
    int n, m;
    cout << "Введите количество строк: ";
    cin >> n;
    cout << "Введите количество столбцов: ";
    cin >> m;
    cout << endl;
 
    //создание динамического двумерного массива
    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() % 5;
            cout << a[i][j] << "  " ;
        }
        cout << endl;
    }
    //ищем количество строк, где имеется хотя бы один нулевой элемент
    int k = 0;
    for (int i = 0; i < n; i++)// перебираем отдельные строки
    {
        for (int j = 0; j < m; j++)
        {
            if (a[i][j] == 0)//считаем количество строк, где есть ноль
            {
                k++;
                break;
            }
        }
        
    }
    cout << "Количество строк, содержащих хотя бы один нулевой элемент : " << k << endl;
 
    //отсюда не получается
    int maxk = 0;
    int maxj;
    for (int j = 0; j < m; j++)
    {
        int A = a[0][j];
        int kol = 0;
        for (int i = 0; i < n; i++)
        {
            if (a[i][j] == A)
            {
                kol++;
            }
            else 
            {
                if (kol > maxk)
                {
                    maxk = kol;
                    kol = 0;
                    maxj = j;
                }
            }
        }
    }
    cout << maxj;
 
//ниже потом будет дописано
    
}
1i10 вне форума Ответить с цитированием
Старый 18.12.2018, 18:10   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Как минимум: в else надо менять А, и кол-во устанавливать в 1.
p51x вне форума Ответить с цитированием
Старый 18.12.2018, 19:32   #3
1i10
 
Регистрация: 31.10.2018
Сообщений: 9
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Как минимум: в else надо менять А, и кол-во устанавливать в 1.
Вот так. Но снова не то выходит.
Код:
        int kol = 0;
	int maxj = 0;
	int maxk = 0;
	for (int j = 0; j < m; j++)
	{
		for (int i = 0; i < n-1; i++)
		{
			if (a[i][j] == a[i+1][j])
			{
				kol++;
			}
			if (kol > maxk)
			{
				maxk = kol;
				maxj = j + 1;
			}
			
		}
	}
	cout << maxj;
1i10 вне форума Ответить с цитированием
Старый 18.12.2018, 19:51   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

А kol кто сбрасывать будет?
p51x вне форума Ответить с цитированием
Старый 18.12.2018, 22:15   #5
1i10
 
Регистрация: 31.10.2018
Сообщений: 9
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
А kol кто сбрасывать будет?
Так?Да все равно не то выходит
Код:
int kol = 0;
	int maxj = 0;
	int maxk = 0;
	for (int j = 0; j < m; j++)
	{
		for (int i = 0; i < n-1; i++)
		{
			if (a[i][j] == a[i+1][j])
			{
				kol++;
			}
			if (kol > maxk)
			{
				maxk = kol;
				kol = 0;
				maxj = j + 1;
			}
			
		}
	}
	cout << maxj;
1i10 вне форума Ответить с цитированием
Старый 18.12.2018, 23:06   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Не так. Что будет с kol если a[i][j] != a[i+1][j]?
p51x вне форума Ответить с цитированием
Старый 19.12.2018, 13:18   #7
1i10
 
Регистрация: 31.10.2018
Сообщений: 9
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Не так. Что будет с kol если a[i][j] != a[i+1][j]?
Теперь работает правильно. Спасибо.
А как сделать так, чтобы он выдавал не один номер столбца?Ведь может быть такое, что в нескольких столбцах есть одинаковое количество серий.
Код:
int kol = 0;
	int maxj = 0;
	int maxk = 0;
	for (int j = 0; j < m; j++)
	{
		for (int i = 0; i < n-1; i++)
		{
			if (a[i][j] == a[i+1][j])
			{
				kol++;
			}
			else
			{
				break;
			}
			if (kol > maxk)
			{
				maxk = kol;
				maxj = j + 1;
			}
			
		}
	}
	cout << maxj<<endl;
1i10 вне форума Ответить с цитированием
Старый 19.12.2018, 13:36   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Ну так храните несколько, например, в массиве.
p51x вне форума Ответить с цитированием
Старый 19.12.2018, 15:28   #9
1i10
 
Регистрация: 31.10.2018
Сообщений: 9
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Ну так храните несколько, например, в массиве.
А как это реализовать?
1i10 вне форума Ответить с цитированием
Старый 19.12.2018, 15:31   #10
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Код:
if(kol == maxk) vec.push_back(j);
p51x вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В квадратной матрице A [ N ][ N ] определить номер столбца матрицы, имеющего наибольшую сумму элементов. Поменять этот столбец со Foxlin Помощь студентам 1 05.12.2013 23:10
Найти столбец где сумма элементов столбца наибольшая выше главной диагонали Max11 Помощь студентам 1 29.01.2013 14:59
Дана матрица (4;6). Определить и вывести номер столбца, сумма элементов которого максимальна stdlife Паскаль, Turbo Pascal, PascalABC.NET 4 22.11.2012 00:01
наибольшая сумму элементов столбца Delphi warma2d Помощь студентам 3 21.11.2010 00:15
подсчитать суммы элементов заданной строки и заданного столбца и определить, где сумма минимальна lubov09 Помощь студентам 4 11.11.2009 17:02