zoukankan      html  css  js  c++  java
  • 环数组的最大子数组

    #include<stdio.h>
    #define N 1000
    #define INF 10000
    int MaxSubSum(int * arr,int n ,int Size)
    {
        int maxSum = -INF;
        int sum = 0;
        int i=0;
        for(  i = n; i < n+Size; i++)
        {
            if(sum < 0)
            {
                sum = arr[i];
            }
            else
            {
                sum += arr[i];
            }
            if(sum > maxSum)
            {
                maxSum = sum;
            }
        }
        return maxSum;
    }
    int seekmax(int*arr,int Size)
    {
        int m=arr[0];
        int i=0;
        for(  i = 0; i < Size; i++)
        {
            if(m<arr[i])
            {
               m=arr[i];
            }
        }
        return m;
    }
    
    
    
    int main()
    {
        int BreakRing(int *arr,int Size);
        int MSS;
        int i;
        int j=0;
        int n=0;
        int arr[N]={0};
        char c;//用来判断何时停止输入的
        printf("input N number:
    ");
        for(i=0;i<N;i++)
        {
            scanf("%d",&arr[i]);
             scanf("%c",&c);
            j++;//计数器
            if(c=='
    ')//打入回车则自动结束
            {
              break;
            }
        }
        printf("环数组:
    ");
    
        for(i=0;i<j;i++)//原数组打出屏幕
        {
            printf("%d  ",arr[i]);
        }
    
        printf("
    ");
    
        MSS=BreakRing(arr,j);
        printf("结果:
    ");
    
        printf("Mss=%d
    ",MSS);
        return 0;
    
    }
    int BreakRing(int *arr,int Size)
    {
        int b[N]={0};
        int i;
        int j=0;
        int Max;
        int k=0;
        int Max1[N]={0};
        for(i=0;i<Size;i++)
        {
            b[i]=arr[i];
        }
         for(i=Size;i<2*Size-1;i++)
        {
            b[i]=arr[j++];
        }
        printf("打开:
    ");
    
        for(i=0;i<2*Size-1;i++)//数组打出屏幕
        {
            printf("%d  ",b[i]);
        }
        printf("
    ");
        for(k=0;k<Size;k++)
        {
            Max1[k]=MaxSubSum(b,k,Size);
    
        }
         Max=seekmax(Max1,Size);
        return Max;
    }

    运行截图:

    解决思路:

    老师课堂上已经讲过了一点思路,即把环数组拆开成一维数组。但为了保证可以从最后一个开始,经第一个进行循环,要对数组进行变形,将一个周期填充满,这样就保证了循环(如图所示)。

     然后我构造了数组b,将展开的数组存入。

    然后以size为步长,反复调用先前构造的MaxSubSum函数,得到一个序列,其中最大值即为所求。

     

  • 相关阅读:
    转 哪个家伙说“网站去.Net化”?
    javascript prototype
    Spring作用,MVC容器作用
    javascript 闭包
    导入Excel数据至Access 宁静以致远
    My first mobile message 宁静以致远
    MyEclipse遇到的错误
    JAVAEE错误处理
    JavaEE ActionForm的高级应用
    hibernate
  • 原文地址:https://www.cnblogs.com/1742031541lh/p/9904613.html
Copyright © 2011-2022 走看看