唐山做网站的公司建设部的官方网站
2026/4/1 4:58:15 网站建设 项目流程
唐山做网站的公司,建设部的官方网站,关于汽车的网站,seo公司官网(新卷,100分)- 矩阵稀疏扫描#xff08;Java JS Python C#xff09; 题目描述 如果矩阵中的许多系数都为零#xff0c;那么该矩阵就是稀疏的。对稀疏现象有兴趣是因为它的开发可以带来巨大的计算节省#xff0c;并且在许多大的实践中都会出现矩阵稀疏…(新卷,100分)- 矩阵稀疏扫描Java JS Python C题目描述如果矩阵中的许多系数都为零那么该矩阵就是稀疏的。对稀疏现象有兴趣是因为它的开发可以带来巨大的计算节省并且在许多大的实践中都会出现矩阵稀疏的问题。给定一个矩阵现在需要逐行和逐列地扫描矩阵如果某一行或者某一列内存在连续出现的0的个数超过了行宽或者列宽的一半 [W /2] (整除) 则认为该行或者该列是稀疏的。扫描给定的矩阵输出稀疏的行数和列数。输入描述第一行输入为M和N表示矩阵的大小M*N0 M ≤ 1000 N ≤ 100接下来M行输入为矩阵的成员每行N个成员矩阵成员都是有符号整数范围-32,768到32,767输出描述输出两行第一行表示稀疏行的个数第二行表示稀疏列的个数用例输入3 31 0 00 1 00 0 1输出33说明给定的3*3矩阵里每一行和每一列内都存在2个0行宽3列宽3[3/2] 1因此稀疏行有3个稀疏列有3个。输入5 3-1 0 10 0 0-1 0 00 -1 00 0 0输出53说明给定的5*3矩阵每行里面0的个数大于等于1表示稀疏行每列里面0的个数大于等于2表示稀疏行所以有5个稀疏行,3个稀疏列。题目解析本题题目中说如果某一行或者某一列内存在连续出现的0的个数超过了行宽或者列宽的一半 [W /2] (整除) 则认为该行或者该列是稀疏的。而用例里面对于稀疏行和稀疏列的确认却不是根据连续0的个数而是以0的个数即不连续也可以。以用例说明为准不以连续0为判断标准可得100%通过率我的解题思路是定义两个数组rowZeroCount数组长度为mrowZeroCount[i] 代表第 i 行中含0个数colZeroCount数组长度为ncolZeroCount[j] 代表第 j 列中含0个数这样的话只要遍历输入的矩阵matrix的每一个元素matrix[i][j]如果matrix[i][j]0那么说明在第 i 行找到一个0此时rowZeroCount[i]以及在第 j 列找到一个0此时colZeroCount[j]。最后只要分别统计rowZeroCount中有多少个大于 n / 2注意一行有n个元素以及colZeroCount中有多个大于 m / 2注意一列有m个元素。Java算法源码import java.util.Arrays; import 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[] rowZeroCount new int[m]; int[] colZeroCount new int[n]; for (int i 0; i m; i) { for (int j 0; j n; j) { if (sc.nextInt() 0) { rowZeroCount[i]; colZeroCount[j]; } } } System.out.println(Arrays.stream(rowZeroCount).filter(val - val n / 2).count()); System.out.println(Arrays.stream(colZeroCount).filter(val - val m / 2).count()); } }JS算法源码/* JavaScript Node ACM模式 控制台输入获取 */ const readline require(readline); const rl readline.createInterface({ input: process.stdin, output: process.stdout, }); const lines []; let m, n; rl.on(line, (line) { lines.push(line); if (lines.length 1) { [m, n] lines[0].split( ).map(Number); } if (m lines.length m 1) { lines.shift(); const matrix lines.map((s) s.split( ).map(Number)); getResult(m, n, matrix); lines.length 0; } }); function getResult(m, n, matrix) { const rowZeroCount new Array(m).fill(0); const colZeroCount new Array(n).fill(0); for (let i 0; i m; i) { for (let j 0; j n; j) { if (matrix[i][j] 0) { rowZeroCount[i]; colZeroCount[j]; } } } console.log(rowZeroCount.filter((val) val Math.floor(n / 2)).length); console.log(colZeroCount.filter((val) val Math.floor(m / 2)).length); }Python算法源码# 输入获取 m, n map(int, input().split()) matrix [list(map(int, input().split())) for _ in range(m)] # 算法入口 def getResult(): rowZeroCount [0] * m colZeroCount [0] * n for i in range(m): for j in range(n): if matrix[i][j] 0: rowZeroCount[i] 1 colZeroCount[j] 1 print(len(list(filter(lambda val: val n // 2, rowZeroCount)))) print(len(list(filter(lambda val: val m // 2, colZeroCount)))) # 算法调用 getResult()C算法源码#include stdio.h #define MAX_ROWS 100 #define MAX_COLS 100 int filter(int* arr, int arr_length, int threhold); int main() { // 输入获取 int m, n; scanf(%d %d, m, n); // 记录对应行中值为0的元素的个数 int rowZeroCount[MAX_ROWS] {0}; // 记录对应列中值为0的元素的个数 int colZeroCount[MAX_COLS] {0}; for(int i 0; i m; i) { for(int j 0; j n; j) { // 矩阵元素获取 int num; scanf(%d, num); // 如果矩阵元素值为0则对应行第 i 行含0个数对应列第 j 列含0个数 if(num 0) { rowZeroCount[i]; colZeroCount[j]; } } } // 一行共有n个元素如果对应行值为0的元素超过n/2个即为稀疏行 printf(%d\n, filter(rowZeroCount, m, n / 2)); // 一列共有m个元素只要对应列值为0的元素超过m/2个即为稀疏列 printf(%d\n, filter(colZeroCount, n, m / 2)); return 0; } // 统计数组arr中大于等于threhold的元素的个数 int filter(int* arr, int arr_length, int threhold) { int count 0; for(int i0; iarr_length; i) { if(arr[i] threhold) { count; } } return count; }以题目描述为准以连续0为判断标准我的解题思路是定义两个数组rowZeroConstantMaxCount数组长度为mrowZeroConstantMaxCount[i] 代表第 i 行中连续0的最大个数colZeroConstantMaxCount数组长度为ncolZeroConstantMaxCount[j] 代表第 j 列中连续0的最大个数同时定义两个中间数组rowZeroConstantCount数组长度为mrowZeroConstantCount[i] 代表第 i 行中各段连续0的个数colZeroConstantCount数组长度为ncolZeroConstantCount[j] 代表第 j 列中各段连续0的个数这样的话只要遍历输入的矩阵matrix的每一个元素matrix[i][j]如果matrix[i][j]0那么说明在第 i 行找到一个0此时rowZeroConstantCount[i]即第i行的连续0个数1另外还要比较记录最大连续0个数更新rowZeroConstantMaxCount[i]中在第 j 列找到一个0此时colZeroConstantCount[j]即第i列的连续0个数1另外还要比较记录最大连续0个数更新colZeroConstantMaxCount[i]中如果matrix[i][j] ! 0那么说明在第 i 行连续0中断此时rowZeroConstantCount[i]0在第 j 列连续0中断此时colZeroConstantCount[j]0最后只要分别统计rowZeroConstantMaxCount中有多少个大于 n / 2注意一行有n个元素以及olZeroConstantMaxCount中有多个大于 m / 2注意一列有m个元素。Java算法源码import java.util.Arrays; import 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(); // 临时记录每行的连续0个数 int[] rowConstantZeroCount new int[m]; // 临时记录每列的连续0个数 int[] colConstantZeroCount new int[n]; // 记录每行的最大连续0个数 int[] rowConstantZeroMaxCount new int[m]; // 记录每列的最大连续0个数 int[] colConstantZeroMaxCount new int[n]; for (int i 0; i m; i) { for (int j 0; j n; j) { if (sc.nextInt() 0) { // 如果第i行第j列为0, 则第i行连续0个数1第j列连续0个数1 rowConstantZeroCount[i] 1; rowConstantZeroMaxCount[i] Math.max(rowConstantZeroMaxCount[i], rowConstantZeroCount[i]); colConstantZeroCount[j] 1; colConstantZeroMaxCount[j] Math.max(colConstantZeroMaxCount[j], colConstantZeroCount[j]); } else { // 如果如果第i行第j列不为0,则第i行连续0中断第j列连续0中断 rowConstantZeroCount[i] 0; colConstantZeroCount[j] 0; } } } System.out.println(Arrays.stream(rowConstantZeroMaxCount).filter(val - val n / 2).count()); System.out.println(Arrays.stream(colConstantZeroMaxCount).filter(val - val m / 2).count()); } }JS算法源码/* JavaScript Node ACM模式 控制台输入获取 */ const readline require(readline); const rl readline.createInterface({ input: process.stdin, output: process.stdout, }); const lines []; let m, n; rl.on(line, (line) { lines.push(line); if (lines.length 1) { [m, n] lines[0].split( ).map(Number); } if (m lines.length m 1) { lines.shift(); const matrix lines.map((s) s.split( ).map(Number)); getResult(m, n, matrix); lines.length 0; } }); function getResult(m, n, matrix) { // 临时记录每行的连续0个数 const rowConstantZeroCount new Array(m).fill(0); // 临时记录每列的连续0个数 const colConstantZeroCount new Array(n).fill(0); // 记录每行的最大连续0个数 const rowConstantZeroMaxCount new Array(m).fill(0); // 记录每列的最大连续0个数 const colConstantZeroMaxCount new Array(n).fill(0); for (let i 0; i m; i) { for (let j 0; j n; j) { if (matrix[i][j] 0) { // 如果第i行第j列为0, 则第i行连续0个数1第j列连续0个数1 rowConstantZeroCount[i]; rowConstantZeroMaxCount[i] Math.max( rowConstantZeroMaxCount[i], rowConstantZeroCount[i] ); colConstantZeroCount[j]; colConstantZeroMaxCount[j] Math.max( colConstantZeroMaxCount[j], colConstantZeroCount[j] ); } else { // 如果如果第i行第j列不为0,则第i行连续0中断第j列连续0中断 rowConstantZeroCount[i] 0; colConstantZeroCount[j] 0; } } } console.log( rowConstantZeroMaxCount.filter((val) val Math.floor(n / 2)).length ); console.log( colConstantZeroMaxCount.filter((val) val Math.floor(m / 2)).length ); }Python算法源码# 输入获取 m, n map(int, input().split()) matrix [list(map(int, input().split())) for _ in range(m)] # 算法入口 def getResult(): # 临时记录每行的连续0个数 rowConstantZeroCount [0] * m # 临时记录每列的连续0个数 colConstantZeroCount [0] * n # 记录每行的最大连续0个数 rowConstantZeroMaxCount [0] * m # 记录每列的最大连续0个数 colConstantZeroMaxCount [0] * n for i in range(m): for j in range(n): if matrix[i][j] 0: # 如果第i行第j列为0, 则第i行连续0个数1第j列连续0个数1 rowConstantZeroCount[i] 1 rowConstantZeroMaxCount[i] max(rowConstantZeroMaxCount[i], rowConstantZeroCount[i]) colConstantZeroCount[j] 1 colConstantZeroMaxCount[j] max(colConstantZeroMaxCount[j], colConstantZeroCount[j]) else: # 如果如果第i行第j列不为0,则第i行连续0中断第j列连续0中断 rowConstantZeroCount[i] 0 colConstantZeroCount[j] 0 print(len(list(filter(lambda val: val n // 2, rowConstantZeroMaxCount)))) print(len(list(filter(lambda val: val m // 2, colConstantZeroMaxCount)))) # 算法调用 getResult()C算法源码#include stdio.h #define MAX_ROWS 100 #define MAX_COLS 100 #define MAX(a,b) a b ? a : b int filter(int* arr, int arr_length, int threhold); int main() { // 输入获取 int m, n; scanf(%d %d, m, n); // 临时记录每行的连续0个数 int rowConstantZeroCount[MAX_ROWS] {0}; // 临时记录每列的连续0个数 int colConstantZeroCount[MAX_COLS] {0}; // 记录每行的最大连续0个数 int rowConstantZeroMaxCount[MAX_ROWS] {0}; // 记录每列的最大连续0个数 int colConstantZeroMaxCount[MAX_COLS] {0}; for(int i0; im; i) { for(int j0; jn; j) { int num; scanf(%d, num); if(num 0) { // 如果第i行第j列为0, 则第i行连续0个数1第j列连续0个数1 rowConstantZeroCount[i] 1; rowConstantZeroMaxCount[i] MAX(rowConstantZeroMaxCount[i], rowConstantZeroCount[i]); colConstantZeroCount[j] 1; colConstantZeroMaxCount[j] MAX(colConstantZeroMaxCount[j], colConstantZeroCount[j]); } else { // 如果如果第i行第j列不为0,则第i行连续0中断第j列连续0中断 rowConstantZeroCount[i] 0; colConstantZeroCount[j] 0; } } } // 一行共有n个元素如果对应行最大连续0的元素超过n/2个即为稀疏行 printf(%d\n, filter(rowConstantZeroMaxCount, m, n / 2)); // 一列共有m个元素只要对应列最大连续0的元素超过m/2个即为稀疏列 printf(%d\n, filter(colConstantZeroMaxCount, n, m / 2)); return 0; } // 统计数组arr中大于等于threhold的元素的个数 int filter(int* arr, int arr_length, int threhold) { int count 0; for(int i0; iarr_length; i) { if(arr[i] threhold) { count; } } return count; }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询