1 条题解

  • 0
    @ 2025-5-22 14:32:00

    矩阵列全1检测 - 解题思路

    这段代码用于检测多个矩阵中是否存在至少一个全1的列,并输出检测结果。

    算法核心思路

    1. 输入处理

      • 持续读取矩阵的行数(NUM2)和列数(NUM1),直到遇到两个0表示输入结束
      • 为每个矩阵动态创建二维数组存储数据
      • 逐行逐列读取矩阵元素值(0或1)
    2. 全1列检测

      • 对每个矩阵的每一列进行检查
      • 如果发现某列的所有元素都为1,则标记该矩阵存在全1列
      • 使用标志位flag记录当前列的检查结果
      • 使用t作为整个矩阵的检测结果标记
    3. 结果存储与输出

      • 将每个矩阵的检测结果(t值)存入结果向量jg
      • 最后统一输出所有检测结果,1对应"yes",0对应"no"

    关键特点

    • 动态输入处理:支持连续处理多个不同尺寸的矩阵
    • 提前终止优化:发现全1列后立即停止后续列的检查
    • 批量结果输出:先收集所有结果再统一输出
    • 简单高效:时间复杂度为O(m×n),其中m为行数,n为列数
    #include <iostream>
    #include <vector>
    using namespace std;
    int main()
    {
    	vector<int> jg;
    	while(1)
    	{
    		int NUM1,NUM2;
    		cin>>NUM1>>NUM2;
    		if((NUM1==0)&&(NUM2==0))
    		{
    			break;
    		}
    		int a[NUM2][NUM1];
    		for(int i=0;i<NUM2;i++)
    		{
    			for(int j=0;j<NUM1;j++)
    			{
    				cin>>a[i][j];
    			}
    		}
    		int t=0;
    		for(int i=0;i<NUM1;i++)
    		{
    			int flag=1;
    			for(int j=0;j<NUM2;j++)
    			{
    				if(a[j][i]==0)
    				{
    					flag=0;
    					break;
    				}
    			}
    			if(flag==1)
    			{
    				t=1;
    				break;
    			}
    		}
    		jg.push_back(t);
    	}
    	for(int i=0;i<jg.size();i++)
    	{
    		if(jg[i]==1)
    		{
    			cout<<"yes"<<endl;
    		}else
    		{
    			cout<<"no"<<endl;
    		}
    	}
    	return 0;
    } 
    
    
    
    • 1

    信息

    ID
    1864
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    6
    已通过
    2
    上传者