如何在 2D 矢量 C++ 中消除马克西姆

how to eliminate maxim in a 2d vector c++

本文关键字:马克 C++ 2D 矢量      更新时间:2023-10-16

嗨,我需要从 2D 向量中消除一个 x,这是一个示例,C++

1 2 3
4 5 6
7 8 9
 x=9

库特

1 2
4 5

这是我尝试过的,每当我放时它都不起作用

1 1 2
3 4 5
6 7 8

它停止了,我找不到问题

#include<iostream.h>
int main()
{
  int v[100][100],i,j,x,m,n;
  int nv[100][100];  
  cout<<"linii:";
  cin>>n;
  cout<<endl;
  cout<<"coloane:";
  cin>>m;
  cout<<endl;
  cout<<"Introduceti matricea"<<endl;
  for(i=1;i<=n;i++){
      for(j=1;j<=m;j++){
          cin>>v[i][j];
        }
    }
   cout<<endl;
   cout<<"Matricea este"<<endl;
   for(i=1;i<=n;i++){
      for(j=1;j<=m;j++){
          cout<<v[i][j]<<" ";
        }
        cout<<endl;
    }
    int k=0,l=0,q=0,t=0,p;
    cout<<"Introduceti X:";
    cin>>x;
   while(t == 0){
       p=0;
     for(i=1;i<=n;i++){
      for(j=1;j<=m;j++){
           if(v[i][j] == x){
                k=i;
                l=j;
                p++;
                q++;
                if(v[i][j]==v[i+1][j])
                {
                    k++;
                }
                    if(v[i][j]==v[i][j+1])
                    {
                        l++;
                    }
             }
        }
     }
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++){
            if(i==k || j==l){}
            else if(i<k && j<l){
                nv[i][j]=v[i][j];
                }
            else if(i<k && j>l){
                nv[i][j-1]=v[i][j];
                }
            else if(i>k && j<l){
                nv[i-1][j]=v[i][j];
                }
            else {nv[i-1][j-1]=v[i][j];}
        }
    }
     for(i=1;i<=n-q;i++){
        for(j=1;j<=m-q;j++){
            v[i][j]=nv[i][j];
        }
    }
    if(p==1){
        t=1;
    }
}
    cout<<"matricea finala"<<endl;
    for(i=1;i<=n-q;i++){
        for(j=1;j<=m-q;j++){
            cout<<v[i][j]<<" ";
        }
        cout<<endl;
    }

}

答案是

int main()
{
    int n, m, maxI = 0, maxJ = 0;
    cout << "linii:";
    cin >> n;
    vector<vector<int>> numbers(n);
    cout << "coloane:";
    cin >> m;
    cout << "Introduceti matricea" << endl;
    for (int i = 0; i < n;i++) {
        numbers[i].resize(m);
        for (int j = 0; j < m; j++)
        {
            cin >> numbers[i][j];
            if (numbers[i][j] > numbers[maxI][maxJ])
            {
                maxI = i;
                maxJ = j;
            }
        }
    }
    numbers.erase(maxI + numbers.begin());
    cout << "matricea finala" << endl;
    for (auto& itr : numbers) {
        itr.erase(maxJ + itr.begin());
        for (const auto& itr2 : itr)
            cout << itr2 << " ";
        cout << endl;
    }
    return 0;
}

我使用 std::vector 来删除 max 元素。