Я пишу программу на C ++, где вводятся значения N (количество деревень / рядов), M (количество дней / столбцов) и матрица H [N] [M], в которую я отдельно вводю температуру(мин. -50, макс. 50).
Выходными данными должно быть общее количество дней, когда деревня с самой низкой температурой имеет самую высокую прогнозируемую температуру, и после этого число (столбец) этих дней в восходящемпорядок.
Так что, если я введу что-то вроде этого:
3 5
10 15 12 10 10
11 11 11 11 20
12 16 16 16 20
Вывод должен быть:
2 2 3
Или введите:
3 3
1 2 3
1 2 3
1 2 3
Вывод:
2 1 2
Мой подход состоял в том, чтобы сначала сохранить минимальные температуры и максимальные прогнозные температуры каждого дня в двух отдельных массивах, а затем написать цикл for, где я проверяю каждую деревню изо дня в день, если они содержат обаминимальное значение для данного дня и максимальное прогнозируемое значение температуры с этого дня.
У меня есть следующий код:
#include <iostream>
const int maxarr = 1000;
int H[maxarr][maxarr];
using namespace std;
void read(int N, int M, int t[maxarr][maxarr]);
void count(int N, int M, int t[maxarr][maxarr]);
int main()
{
int N;
int M;
cout<<"Number of villages? ";
cin>>N;
cout<<"Number of days? ";
cin>>M;
read(N,M,H);
count(N,M,H);
return 0;
}
void read(int N, int M, int t[maxarr][maxarr])
{
for(int i = 0; i < N ; i++)
{
for(int j = 0; j < M ; j++)
{
cin>>t[i][j];
}
}
}
void count(int N, int M, int t[maxarr][maxarr])
{
int mintemparr[maxarr];
int maxtemparr[maxarr];
int mintemp;
int maxtemp;
int days[maxarr];
int cnt = 0;
for(int j = 0; j<M; j++)
{
mintemp = 51;
for(int i = 0; i<N; i++)
{
if(t[i][j]<mintemp)
{
mintemp = t[i][j];
}
mintemparr[j] = mintemp;
}
}
for(int i = 0; i < M-1; i++)
{
maxtemp = -51;
for(int j = 0; j < N; j++)
{
for(int k = i+1; k < M; k++)
{
if(t[j][k]>maxtemp)
{
maxtemp = t[j][k];
}
}
maxtemparr[i] = maxtemp;
}
}
for(int i = 0; i < M-1; i++)
{
for(int j = 0; j < N; j++)
{
for(int k = i+1; k < M; k++)
{
if(t[j][i] == mintemparr[i])
{
if(t[j][k] == maxtemparr[i])
{
days[cnt] = i+1;
cnt++;
//tried an i++ here, didn't work as intended
}
}
else
{
j++;
}
}
}
}
cout<<cnt<<" ";
for(int i = 0; i < cnt; i++)
{
cout<<days[i]<<" ";
}
}
В некоторых случаях это работает идеально, напримерс первым входом он выводится так, как должно быть.Но со вторым вводом я получаю
6 1 1 1 2 2 2
и более длинный (1000x1000) ввод, который я, очевидно, не могу скопировать здесь, также дает неверные результаты.Как я могу заставить этот код работать как задумано?