返回一个二维循环数组中最大子矩阵的和
设计思路
和一维循环数组思路相仿,循环N次,每次将第一列的数移到最后一列,新建一个相同规格的二维数组来存放新矩阵,将之前写的求二维数组最大子矩阵的和的算法稍作修改,添加一个循环即可满足要求。
源程序代码
#include<iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
#define M 4
#define N 4
void main()
{
int a[M][N],aa[M][N],i,j,b,c,z;
cout<<"请输入数值范围:"<<endl;
cin>>b>>c;
cout<<"生成二维数组为:"<<endl;
srand(unsigned(time(0)));
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
{
a[i][j]=rand()%(c-b+1)+b;
cout<<a[i][j]<<" ";
}
cout<<endl;
}
int sum,s[100],k=0,o=-1000,p=-1000,q=-1000;
for(j=0;j<N;j++)
{
s[j]=0;
}
for (int lun=0;lun<N;lun++)
{
for (int lunm=0;lunm<M;lunm++)
{
for (int lunn=0;lunn<N;lunn++)
{
if (lunn+lun<N)
{
aa[lunm][lunn]=a[lunm][lunn+lun];
}
else
aa[lunm][lunn]=a[lunm][lunn+lun-N];
}
}
for(int ii=0;ii<M;ii++)
{
while(k+ii<M)
{
for(j=0;j<N;j++)
{
s[j]=s[j]+aa[k+ii][j];
}
for (i=0;i<N;i++)
{
for (j=i;j<N;j++)
{
sum=0;
for (z=i;z<=j;z++)
{
sum=sum+s[z];
}
if (sum>o) o=sum;
}
if (o>p)
{
p=o;
}
}
k++;
}
if (p>q)
{
q=p;
}
k=0;
for(j=0;j<N;j++)
{
s[j]=0;
}
}
}
cout<<"子矩阵最大值为:"<<q<<endl;
}
运行结果截图
编程总结
在原代码的基础上修改代码可以节省许多时间,所以要能够熟练的读懂代码、修改代码。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· DeepSeek 解答了困扰我五年的技术问题。时代确实变了!
· PPT革命!DeepSeek+Kimi=N小时工作5分钟完成?
· What?废柴, 还在本地部署DeepSeek吗?Are you kidding?
· DeepSeek企业级部署实战指南:从服务器选型到Dify私有化落地
· 程序员转型AI:行业分析