C++. Определить элемент квадратной матрицы и его координаты
Определить элемент квадратной матрицы и его координаты, который останется в результате последовательного вычеркивания из матрицы строки и столбца с наименьшей суммой модулей элементов.
Программа работает, но периодически выдает неверный ответ. Не могу понять в чем ошибка.
#include <iostream>
#include <cmath>
using namespace std;
void check ()
{
cin.clear();
while (cin.get() != '\n');
cout << "Ошибка ввода!" << endl;
cout << "Повторите ввод!" << endl;
}
int main()
{
while(true) // бесконечный цикл
{
system("cls"); // очищаем экран
setlocale(LC_ALL, "Russian");
cout<<"Введие размер марицы: "<<endl;
int n;
while (!(cin >> n) || (cin.peek() != '\n'))
{
check ();
cout << "Ошибка ввода." << endl;
}
int mat[n][n];
cout<<"Введие матрицу: "<<endl;
for (int i=0;i<n;i++)
for (int j=0;j<n;j++)
while (!(cin >> mat[i][j]) || (cin.peek() != '\n'))
{
check ();
cout << "Ошибка ввода." << endl;
}
cout << "---------------" << endl;
for (int i=0;i<n;i++){
for (int j=0;j<n;j++)
cout << mat[i][j]<<" ";
cout<<"\n";}
cout << "---------------" << endl;
int x[n];
int y[n];
for (int i=0;i<n;i++)
{
x[i]=i;
y[i]=i;
}
int m=n;
int sumi[n],sumj[n];
int mini, minj,temp,q,w;
//---------------------------------Основной код
for (int i=0;i<n-1;i++)
{
for (int i=0;i<m;i++)
{
sumi[i]=0;
for (int j=0;j<m;j++)
sumi[i]=sumi[i]+abs(mat[i][j]);
}
mini=sumi[0];
for (int j=0;j<m;j++)
if (mini>sumi[i]){mini=sumi[i];}
for (int i=0;i<m;i++)
{
if (mini==sumi[i]){
for (int q=i;q<m-1;q++)
for (int j=0;j<m;j++)
{mat[q][j]=mat[q+1][j];x[q]=x[q+1];}
break;}}
for (int j=0;j<m;j++)
{
sumj[j]=0;
for (int i=0;i<m;i++)
sumj[j]=sumj[j]+abs(mat[i][j]);
}
minj=sumj[0];
for (int j=0;j<m;j++)
if (minj>sumj[j]){minj=sumj[j];}
for (int j=0;j<m;j++)
{
if (minj==sumj[j])
{for (int i=0;i<m;i++)
for (int w=j;w<m-1;w++)
{mat[i][w]=mat[i][w+1];y[w]=y[w+1];}
break;}}
m--;
}
//----------------------------------------------------------------
cout << mat[0][0]<<"("<<y[0]+1<<";"<<x[0]+1<<")";
cout<<endl;
int menu;
cout<<endl;
cout<<"Выполнить программу еще раз? (1-да, 2-нет)"<< endl;
do{ while (!(cin >> menu) || (cin.peek() != '\n'))
{
check ();
cout << "Ошибка ввода. Допустимые числа (1-да, 2-нет) " << endl;
}
} while((menu<1)|(menu>2));
if(menu==2)break;
}
}