• 最小正子序列(序列之和最小,同时满足和值要最小)(数据结构与算法分析——C语言描述第二章习题2.12第二问)


    #include "stdio.h"
    #include "stdlib.h"
    #define random(x) (rand()%x)
    void creat_array(int a[],int len,int max);
    void print_array(int a[],int n);
    void main(){
        printf("please input two numbers as the array's length and the array's max_number: 
    ");
        int n,max;
        scanf("%d,%d",&n,&max); 
        int a[n];
        void creat_array(int a[],int len,int max){
            //产生一个随机正负数组
            for(int i=0;i<len;i++){
                a[i]=random(max)-max/2;
            }
        } 
        //int a[]={4,-1,5,-2,-1,2,6,-2};
        //int a[]={4,-1,4};
        creat_array(a,n,max); 
        int min_sum_sqe(int a[],int n){
            //求出数组a的子序列的最小正子序列和
            //任何一个子序列和都可表示成两个子序列之差ABCD序列,B序列可以表示成AB序列减去A序列。
            int sum[n];
            int s=0;
            for(int i=0;i<n;i++){
                sum[i]=0;
            }
            for(int i=0;i<n;i++){
                s+=a[i];
                sum[i]+=s;
            }
            printf("产生的数组和是:
    ");
            print_array(sum,n);
            int min;
            for(int i=0;i<n;i++){
                if(a[i]>0){
                    //因为是求最下正数,必须要保证min>0,不然下面代码中的if判断会失效
                    min=a[i];
                    printf("min:%d 
    ",min);
                    break; 
                }
            }
            int thismin;
            for(int j=0;j<n;j++){
                thismin=sum[j];
                for(int k=j;k<n-1;k++){
                   thismin=sum[k+1]-sum[j];
                   if(thismin>0&&thismin<min){
                        min=thismin;
                        printf("%d,%d,%d
    ",sum[k],sum[j],min);
                   }
                }
            }
            return min;
        }
        int key=min_sum_sqe(a,n);
        printf("最小的正子序列和: %d
    ",key);
        printf("产生的随机数组:
    ");
        print_array(a,n);
    }
        void print_array(int a[],int n){
            //打印随机数组
            
            for(int i=0;i<n;i++){
                ((i+1)%10==0)?printf("%4d 
    ",a[i]):printf("%4d ,",a[i]);
            }
        }
    

    这是 数据结构与算法分析——C语言描述中看第二章习题2.12 第二问的代码

    发布到首页候选去是想各位园子里感兴趣的大神看看这个求最小正序列和的代码正确否。谢谢了

  • 相关阅读:
    【总结整理】javascript的函数在if中调用时是否加括号---与.net的不同之处
    【总结整理】javascript的函数调用时是否加括号
    【总结整理】JavaScript的DOM事件学习(慕课网)
    关于overflow:hidden (转)
    CSS
    HTML
    jQuery
    函数
    装饰器
    python的条件与循环1
  • 原文地址:https://www.cnblogs.com/cc-jony/p/3713367.html
Copyright © 2020-2023  润新知