zoukankan      html  css  js  c++  java
  • 返回二维数组子数组联通和最大

    分析

    我们小组是根据同学上去讲的思路写的,主要就是正数加进来,负数跳过。想象流水一般,数据就往正数方向流动并相加。取得和最大。

    题目要求:

    放在一个input.txt的文件中

    数组里面有正数有负数

    返回联通子数组和最大的值

    结果:

    #include<iostream>
    using namespace std;
    #include<ctime>
    #include<fstream>

    void main()
    {
    int m,n,i,j,smark,mmark,t2;
    int sum;
    int up[100],down[100],t[100];
    int a[100][100],b[100];
    cout<<"输入二维数组的行"<<endl;
    cin>>m;
    cout<<"输入二维数组的列"<<endl;
    cin>>n;


    for(i=0;i<m;i++)
    {
    for(j=0;j<n;j++)
    {
    cin>>a[i][j];
    }
    }

    //输入二维数组

    for(i=0;i<m;i++)
    {
    for(j=0;j<n;j++)
    {
    b[j]=a[i][j];
    }
    int c[100]={0};
    int sum1=0,max1=0,k;

    for(k=0;k<n;k++) //在列上求每一个最大子数组
    {
    if(sum1<0)
    {
    sum1=b[k];
    }
    else
    {
    sum1=sum1+b[k];
    }
    c[k]=sum1;
    }

    max1=c[0];

    for(k=0;k<n;k++)
    {
    if (max1<c[k])
    {
    max1= c[k];
    mmark = k;
    }
    }

    for (k = mmark;k >= 0;k--)
    {
    if (c[k] == b[k])
    {
    smark = k;
    break;
    }
    }

    sum=max1;

    up[i]=smark;
    down[i]=mmark;
    t[i]=sum;

    }

    t2=t[0];
    for(i=0;i+1<m;i++)
    {
    if(up[i]<=down[i+1] && down[i]>=up[i+1])
    {
    t2+=t[i+1];
    }
    for(j=up[i];j<up[i+1];j++)
    {
    if(a[i+1][j]>0) t2+=a[i+1][j]; //判别独立正数
    }

    }
    //文件输出
    ofstream fout("D:\input.txt",ios::binary);

    for(i=0;i<m;i++)
    {
    for(j=0;j<n;j++)
    {
    fout<<a[i][j]<<" ";

    }
    fout<<endl;
    }

    fout<<"最大联通子数组的和为:"<<t2<<endl;

    }

    同伴的链接:http://www.cnblogs.com/tyyhph/p/5352373.html

  • 相关阅读:
    Rust资料
    CMake & Ninja
    @Configurable
    Hibernate startup -> 配置SessionFactory实例
    Vue 渲染函数
    Spring 5 新特性
    @Configuration 注解的用途
    AOP
    AnnotationConfigApplicationContext.() -> Unit
    C编译优化
  • 原文地址:https://www.cnblogs.com/hph1313/p/5352570.html
Copyright © 2011-2022 走看看