小美的n∗n矩阵

小美的平衡矩阵

小美拿到了一个

n∗n的矩阵,其中每个元素是 0 或者 1。

小美认为一个矩形区域是完美的,当且仅当该区域内 0 的数量恰好等于 1 的数量。

现在,小美希望你回答有多少个i∗i

的完美矩形区域。你需要回答

1≤1≤i≤n

的所有答案。

输入描述:

第一行输入一个正整数n,代表矩阵大小。接下来的n行,每行输入一个长度n为的 01 串,用来表示矩阵。

输出描述:

输出i行,在第i行输出 完美的i*i阶矩形的数量。

示例1

输入例子:

4
1010
0101
1100
0011

输出例子:

0
7
0
1

做了一下午,

#include<iostream>
#include<vector>

using namespace std;

int is_perfect(int size, vector<vector<int>>& vn,int n){
    //size是子矩阵的阶数,
    // vn是容器的引用
    // n是vn的阶数
    
    int count = 0;

    for(int i=0;    i<= n-size;  i++)
    for(int j=0;    j<= n-size;  j++)
          {  
             
             
             int sum_one_count = 0;

              for(int x = i; x < i+size; x++)
              for(int y = j; y < j+size; y++)
                {if( vn[x][y] == 1)    
                    sum_one_count++;
                }

             if(sum_one_count == size*size/2)
              count++;

          }

          
    return count;
}



int main(){
    //美团的 完美n*n方阵 判断
    int n;
    cout<<"输入方阵的阶数n  ";
    cin>>n;
    cout<<"输入方阵的每一行,回车键入"<<endl;
    vector<string> str(n);
     for(auto& s:str)
     { //这个范围for太秀了,尤其是这个auto&
         cin>>s;
     }

    vector< vector<int> >  v( n, vector<int>(n) );  
    // 创建一个大小为 n 的外部 v,其中每个元素都是一个大小为 n 的内部 vector<int>
     int i;
    for(i=0;i<n;i++)
        for(int j=0;j<n;j++)
          v[i][j] = str[i][j]-'0'; 
    
    // for(i=0;i<n;i++)
    //     { for(int j=0;j<n;j++)
    //        cout<<v[i][j]<<" ";

    //        cout<<endl;
    //     }


    for(i=1;i<=n;i++)
    if(i%2)
     cout<<0<<endl;
    else
     cout<<is_perfect(i,v,n)<<endl;
    
    system("pause");
    return 0;
}
全部评论

相关推荐

2 4 评论
分享
牛客网
牛客企业服务