查看网站开发,光谷做网站推广哪家好,网站开发工具6,wordpress插件访客稀疏矩阵扫描 华为OD机试B卷 - 华为OD上机考试B卷 100分题型 华为OD机试真题目录点击查看: 华为OD机试真题题库目录#xff5c;机考题库 算法考点详解
题目描述
如果矩阵中的许多系数都为零#xff0c;那么该矩阵就是稀疏的。对稀疏现象有兴趣是因为它的开发可以带来巨大…稀疏矩阵扫描华为OD机试B卷 - 华为OD上机考试B卷 100分题型华为OD机试真题目录点击查看: 华为OD机试真题题库目录机考题库 算法考点详解题目描述如果矩阵中的许多系数都为零那么该矩阵就是稀疏的。对稀疏现象有兴趣是因为它的开发可以带来巨大的计算节省并且在许多大的实践中都会出现矩阵稀疏的问题。给定一个矩阵现在需要逐行和逐列地扫描矩阵如果某一行或者某一列内存在连续出现的0的个数超过了行宽或者列宽的一半 [W /2] (整除) 则认为该行或者该列是稀疏的。扫描给定的矩阵输出稀疏的行数和列数。输入描述第一行输入为M和N表示矩阵的大小M*N0 M ≤ 1000 N ≤ 100接下来M行输入为矩阵的成员每行N个成员矩阵成员都是有符号整数范围-32,768到32,767输出描述输出两行第一行表示稀疏行的个数第二行表示稀疏列的个数用例1输入3 3 1 0 0 0 1 0 0 0 1输出3 3说明给定的3*3矩阵里每一行和每一列内都存在2个0行宽3列宽3[3/2] 1因此稀疏行有3个稀疏列有3个。用例2输入5 3 -1 0 1 0 0 0 -1 0 0 0 -1 0 0 0 0输出5 3说明给定的5*3矩阵每行里面0的个数大于等于1表示稀疏行每列里面0的个数大于等于2表示稀疏行所以有5个稀疏行,3个稀疏列。题解思路模拟首先这个题目有点问题结合题目和用例来看判断稀疏的情况是行中0的个数大于等于行宽一半 列中0的个数大于等于列宽一般就认为稀疏理明白1的规则之后这道题就非常简单了统计每行/列中0的次数然后按照1的规则进行判断统计输出结果就行c#includeiostream #includevector #includestring #include utility #include sstream #includealgorithm #includecmath #includemap using namespace std; int main() { int m , n; cin m n; vectorvectorint grid(m, vectorint(n)); // 行0的个数 vectorint zeroRowNum(m, 0); // 列0的个数 vectorint zeroColNum(n, 0); for (int i 0; i m; i) { for (int j 0; j n; j) { cin grid[i][j]; if (grid[i][j] 0) { zeroRowNum[i]; zeroColNum[j]; } } } // 计算满足条件的行和列 int rowResCount 0, colResCount 0; for (int i 0; i m; i) { if (zeroRowNum[i] n / 2){ rowResCount; } } for (int i 0; i n; i) { if (zeroColNum[i] m / 2){ colResCount; } } cout rowResCount endl; cout colResCount endl; }JAVAimport java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc new Scanner(System.in); int m sc.nextInt(); int n sc.nextInt(); int[][] grid new int[m][n]; // 行0的个数 int[] zeroRowNum new int[m]; // 列0的个数 int[] zeroColNum new int[n]; for (int i 0; i m; i) { for (int j 0; j n; j) { grid[i][j] sc.nextInt(); if (grid[i][j] 0) { zeroRowNum[i]; zeroColNum[j]; } } } // 计算满足条件的行和列 int rowResCount 0, colResCount 0; for (int i 0; i m; i) { if (zeroRowNum[i] n / 2) { rowResCount; } } for (int i 0; i n; i) { if (zeroColNum[i] m / 2) { colResCount; } } System.out.println(rowResCount); System.out.println(colResCount); } }Pythonm,nmap(int,input().split())grid[]zeroRowNum[0]*m# 行0的个数zeroColNum[0]*n# 列0的个数foriinrange(m):rowlist(map(int,input().split()))grid.append(row)forjinrange(n):ifrow[j]0:zeroRowNum[i]1zeroColNum[j]1# 计算满足条件的行和列rowResCountsum(1forxinzeroRowNumifxn//2)colResCountsum(1forxinzeroColNumifxm//2)print(rowResCount)print(colResCount)JavaScriptconstreadlinerequire(readline);constrlreadline.createInterface({input:process.stdin,output:process.stdout,terminal:false});letlines[];rl.on(line,(line){lines.push(line.trim());});rl.on(close,(){let[m,n]lines[0].split( ).map(Number);letgridArray.from({length:m},()Array(n).fill(0));letzeroRowNumArray(m).fill(0);// 行0的个数letzeroColNumArray(n).fill(0);// 列0的个数for(leti0;im;i){letrowlines[i1].split( ).map(Number);for(letj0;jn;j){grid[i][j]row[j];if(row[j]0){zeroRowNum[i];zeroColNum[j];}}}// 计算满足条件的行和列letrowResCountzeroRowNum.filter(xxMath.floor(n/2)).length;letcolResCountzeroColNum.filter(xxMath.floor(m/2)).length;console.log(rowResCount);console.log(colResCount);});Gopackagemainimport(fmt)funcmain(){varm,nintfmt.Scan(m,n)grid:make([][]int,m)zeroRowNum:make([]int,m)// 行0的个数zeroColNum:make([]int,n)// 列0的个数fori:0;im;i{grid[i]make([]int,n)forj:0;jn;j{fmt.Scan(grid[i][j])ifgrid[i][j]0{zeroRowNum[i]zeroColNum[j]}}}// 计算满足条件的行和列rowResCount,colResCount:0,0fori:0;im;i{ifzeroRowNum[i]n/2{rowResCount}}fori:0;in;i{ifzeroColNum[i]m/2{colResCount}}fmt.Println(rowResCount)fmt.Println(colResCount)}