• 最小正子序列(序列之和最小,同时满足和值要最小)(数据结构与算法分析——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 第二问的代码

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

  • 相关阅读:
    利用python脚本统计和删除redis key
    利用expect交互完成多台linux主机ssh key推送
    iptables -L很慢的原因
    tomcat各个端口的作用
    rabbitmq集群搭建
    ping 没有回icmp reply
    go mod 无法下载依赖问题
    0/1 nodes are available: 1 node(s) had taint
    go 编译:build constraints exclude all Go files in
    k8s单机部署
  • 原文地址:https://www.cnblogs.com/cc-jony/p/3713367.html
Copyright © 2020-2023  润新知