在C程序中打印给定大小的最大和正方形子矩阵

给定一个 nxn 的矩阵,找到一个 mxm 的子矩阵,其中 m=1,使得矩阵 mxm 的所有元素之和最大。矩阵 nxn 的输入可以包含零、正整数和负整数值。

在C程序中打印给定大小的最大和正方形子矩阵

示例

Input:   {{1, 1, 1, 1, 1},   {2, 2, 2, 2, 2},   {3, 3, 3, 3, 3},   {4, 4, 4, 4, 4},   {5, 5, 5, 5, 5} }Output:   4 4   5 5

上面的问题可以通过一个简单的解决方案来解决,我们可以取整个矩阵 NxN,然后找出所有可能的 MxM 矩阵并求出它们的和,然后打印具有最大和的 MxM 矩阵。这种方法很简单,但需要 O(N^2.M^2) 时间复杂度,因此我们尝试找到一种时间复杂度较小的方法。

算法

StartStep 1 -> Declare Function void matrix(int arr[][size], int k)   IF k>size      Return   Declare int array[size][size]   Loop For int j=0 and j<size and j++      Set sum=0   Loop for int i=0 and i<k and i++      Set sum=sum + arr[i][j]   End   Set array[0][j]=sum   Loop For int i=1 and i<size-k+1 and i++      Set sum=sum+(arr[i+k-1]][j]-arr[i-1][j]      Set arrayi][j]=sum   End   Set int maxsum = INT_MIN and *pos = NULL   Loop For int i=0 and i<size-k+1 and i++)      Set int sum = 0      Loop For int j = 0 and j maxsum         Set maxsum = sum         Set pos = &(arr[i][0])      End      Loop For int j=1 and j maxsum            Set maxsum = sum            Set pos = &(arr[i][j])         End      End   End   Loop For int i=0 and i<k and i++      Loop For int j=0 and j<k and j++         Print *(pos + i*size + j)      End      Print 

EndStep 2 -> In main() Declare int array[size][size] = {{1, 1, 1, 1, 1}, {2, 2, 2, 2, 2}, {3, 3, 3, 3, 3}, {4, 4, 4, 4, 4}, {5, 5, 5, 5, 5}} Declare int k = 2 Call matrix(array, k)Stop

示例

#include using namespace std;#define size 5void matrix(int arr[][size], int k){   if (k > size) return;      int array[size][size];   for (int j=0; j<size; j++){      int sum = 0;      for (int i=0; i<k; i++)         sum += arr[i][j];         array[0][j] = sum;      for (int i=1; i<size-k+1; i++){         sum += (arr[i+k-1][j] - arr[i-1][j]);         array[i][j] = sum;      }   }   int maxsum = INT_MIN, *pos = NULL;   for (int i=0; i<size-k+1; i++){      int sum = 0;      for (int j = 0; j maxsum){         maxsum = sum;         pos = &(arr[i][0]);      }      for (int j=1; j maxsum){            maxsum = sum;            pos = &(arr[i][j]);         }      }   }   for (int i=0; i<k; i++){      for (int j=0; j<k; j++)         cout << *(pos + i*size + j) << " ";      cout << endl;   }}int main(){   int array[size][size] = {      {1, 1, 1, 1, 1},      {2, 2, 2, 2, 2},      {3, 3, 3, 3, 3},      {4, 4, 4, 4, 4},      {5, 5, 5, 5, 5},   };   int k = 2;   matrix(array, k);   return 0;}

输出

如果我们运行上面的程序,那么它将生成以下输出

4 45 5

以上就是在C程序中打印给定大小的最大和正方形子矩阵的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1444549.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 21:39:18
下一篇 2025年12月17日 21:39:37

相关推荐

  • css怎么把正方形变成圆形

    css把正方形变成圆形的方法:可以利用border-radius属性来实现,如【border-radius:150px】。border-radius属性允许我们为元素添加圆角边框。 本教程操作环境:windows10系统、css3,本文适用于所有品牌的电脑。 属性介绍: border-radius …

    2025年12月24日 好文分享
    000
  • css之分页打印

    这次给大家带来css之分页打印,css之分页打印的注意事项有哪些,下面就是实战案例,一起来看一下。 很久没写文章了,最近做了一个员工入职的项目,该系统有一个批量打印个人信息的功能需求。因为之前也没接触过打印这方面的功能,就上网查了下,发现jquery有个打印功能的 API(PrintArea) ,关…

    2025年12月24日
    000
  • 详细介绍使用纯CSS实现自适应正方形的案例

    在处理移动端页面时,我们有时会需要将 banner 图做成与屏幕等宽的正方形以获得最佳的体验效果,如 flipbord 的移动页面: 那么应该怎么使用纯 CSS 制作出能够自适应大小的正方形呢? 方案一:CSS3 vw 单位 CSS3 中新增了一组相对于可视区域百分比的长度单位 vw, vh, vm…

    2025年12月23日 好文分享
    000
  • html如何截图_使用HTML5 Canvas实现页面截图【页面】

    可在网页中截取图像的四种方法:一、用html2canvas库前端截图;二、用Canvas+SVG+foreignObject保留复杂CSS样式;三、用Chrome DevTools协议远程截屏;四、用Window.print()配合打印CSS导出PDF。 如果您希望在网页中直接截取当前页面或指定区域…

    2025年12月23日
    000
  • 避免HTML硬编码到JS中的方法是什么_避免HTML硬编码到JS中的方法实践

    使用模板字符串、外部模板、模板引擎或前端框架可避免JS中硬编码HTML,提升代码可维护性与安全性。 避免将HTML硬编码到JavaScript中,能提升代码的可维护性、可读性和安全性。直接在JS里拼接HTML字符串虽然简单,但容易出错,也难以调试和扩展。以下是几种实用的方法来解决这个问题。 使用模板…

    2025年12月23日
    000
  • 如何添加一个按钮来打印一个HTML页面?

    在 HTML 网页上添加“打印”按钮,单击该按钮后,将打印整个网页。这是在网页中添加的相当简单的功能,可以使用一些 HTML 元素和纯 JavaScript 来添加。 因此,让我们讨论一下这样做的方法。 方法 首先,在 HTML dom 中添加 标签。 将其 type 属性分配给“button”并为…

    2025年12月21日
    000
  • 怎么使用JavaScript操作浏览器打印功能?

    答案是利用window.print()结合CSS @media print实现局部打印,通过隐藏非打印元素、调整布局样式,并注意浏览器兼容性问题,确保打印内容清晰完整且用户体验良好。 JavaScript操作浏览器打印功能,核心是利用 window.print() 方法,它会直接触发浏览器的打印对话…

    2025年12月20日
    000
  • DOM中如何操作打印功能?

    要避免打印时出现空白页,需检查并调整css样式中的margin、padding及页面尺寸。其次,使用page-break-after或page-break-before属性控制分页。此外,限制打印区域宽度、避免绝对定位、动态调整页面高度,并检查打印机设置是否正确。具体步骤如下:1. 检查并减小过大的…

    2025年12月20日 好文分享
    000
  • js如何检测打印机 网页打印状态检测方法汇总

    检测javascript中打印机状态没有直接通用api,但可通过曲线策略实现。1.window.print()事件监听只能确认对话框关闭,无法区分成功打印或取消;2.matchmedia查询可检测进入或离开打印预览状态,但无法确认实际打印行为;3.后端配合通过发送打印任务并轮询或websocket查…

    2025年12月20日 好文分享
    000
  • C程序打印带有当前时间的数字时钟

    在本节中,我们将了解如何使用 C 语言制作数字时钟。要处理时间,我们可以使用 time.h 头文件。该头文件有一些函数签名,用于处理日期和时间相关问题。 time.h 的四个重要组成部分如下 size_t 这个 size_t 基本上是无符号整数类型。这是sizeof()的结果。 clock_t用于存…

    2025年12月17日
    000
  • 打印出给定字符串中既是该字符串前缀又是该字符串后缀的最长部分,在C程序中

    给定一个字符串,我们必须检查最长前缀的长度,它也是字符串的后缀,就像有一个字符串“abcab”,所以这里“ab”的长度为2,是最长的子字符串相同的前缀和后缀。 示例 Input: str[] = { “aabbccdaabbcc” }Output: 6Input: abdab…

    2025年12月17日
    000
  • 在C语言中,打印已排序的数组中的不重复元素

    给定一个整数元素的数组,任务是删除重复的值并以排序的方式打印出不同的元素。 下面给出了一个以4、6、5、3、4、5、2、8、7和0的顺序存储整数类型值的数组,现在,结果将以0、2、3、4、4、5、5、6、7和8的顺序打印出排序的元素,但是这个结果仍然包含重复的值4和5,应该将它们删除,最终的结果将是…

    2025年12月17日
    000
  • 编写一个程序来打印二项式展开系列

    二项展开式是一个数学公式,用于展开 (a+b)^n 形式的表达式,其中 n 是正整数,a 和 b 可以是任何实数或复数。展开式给出了展开式中各项的系数。 一个二项式展开可以表示为 $$mathrm{(a+b)^n= ^nC_0a^nb^0+ ^nC_1a^{n-1}b^1 + ^nCa^{n-2}b…

    2025年12月17日
    000
  • 打印系列的前N个项(0.25、0.5、0.75,…)的分数表示形式

    输入N,它等于要打印的系列的最大数 Input : N=5Output : 0 ¼ ½ ¾ 1 算法 STARTStep 1 -> declare start variables as int num , den, i, nStep 2 -> i…

    2025年12月17日
    000
  • 递归地打印给定的模式

    在这里,根据给定的问题模式,需要使用递归方法来显示。 递归函数是一个调用自身n次的函数。程序中可以有n个递归函数。递归函数的问题在于它们的复杂性。 算法 STARTStep 1 -> function int printpattern(int n) If n>0 Printpattern…

    2025年12月17日
    000
  • C程序打印“偶数”或“奇数”,不使用条件语句

    在本节中,我们将看到如何在不使用任何条件语句(如,>=,==)的情况下检查一个数是奇数还是偶数。 我们可以通过使用条件语句轻松地检查奇数还是偶数。我们可以将数字除以2,然后检查余数是否为0。如果为0,则是偶数。否则,我们可以将数字与1进行AND运算。如果答案为0,则是偶数,否则为奇数。 这里不…

    2025年12月17日
    000
  • 在C程序中,以矩阵对角线模式打印数字

    任务是打印一个 n x n 的对角线模式的矩阵。 如果 n 是 3,那么打印一个对角线模式的矩阵如下: 所以输出将会是: 示例 Input: 3Output: 1 2 4 3 5 7 6 8 9Input: 4Output: 1 2 4 7 3 5 8 11 6 9 12 14 10 13 15 1…

    2025年12月17日
    000
  • 在C程序中,进行多个数组范围增量操作后,打印修改后的数组

    给定一个数组 arr[m],其中包含 m 个整数和 n(要添加到数组中的值),并给出 r 个查询,并给出一些开始和结束。对于每个查询,我们必须在数组中添加从开头到限制末尾的值 n。 示例 Input:arr[] = {1, 2, 3, 4, 5}query[] = { { 0, 3 }, { 1, …

    2025年12月17日
    000
  • 在C语言中打印对称的双三角形图案

    给定行数,程序必须以最小的复杂性打印对称双三角形图案。 示例 Input: 5Output: X X O X O X X O X O X X O X O X X 整个问题包含3个不同的分区 − 立即学习“C语言免费学习笔记(深入)”; 对于奇数n,打印上半部分的n-1行,对于偶数n,打印上半部分的n…

    2025年12月17日
    000
  • 打印n个数字,使它们的和是一个完全平方数

    给定n个数字,程序必须找到这n个数字的和为一个完全平方数 Input : 5Output : 1 3 5 7 91+3+5+7+9=25 i.e (5)^2 算法 START Step 1 : Declare a Macro for size let’s say of 5 and i t…

    2025年12月17日
    000

发表回复

登录后才能评论
关注微信