#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: \n");
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("产生的数组和是:\n");
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 \n",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\n",sum[k],sum[j],min);
}
}
}
return min;
}
int key=min_sum_sqe(a,n);
printf("最小的正子序列和: %d\n",key);
printf("产生的随机数组:\n");
print_array(a,n);
}
void print_array(int a[],int n){
//打印随机数组 for(int i=0;i<n;i++){
((i+1)%10==0)?printf("%4d \n",a[i]):printf("%4d ,",a[i]);
}
}

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

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

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

  1. 51nod-1065:最小正子段和(STL)

    N个整数组成的序列a11,a22,a33,…,ann,从中选出一个子序列(aii,ai+1i+1,…ajj),使这个子序列的和>0,并且这个和是所有和>0的子序列中最小的. 例如:4,-1 ...

  2. 51nod 1065:最小正子段和

    1065 最小正子段和 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题  收藏  取消关注 N个整数组成的序列a[1],a[2],a[3],-,a[n],从中选出一 ...

  3. 51nod-1065 最小正子段和 【贪心 + 思维】

    N个整数组成的序列a[1],a[2],a[3],-,a[n],从中选出一个子序列(a[i],a[i+1],-a[j]),使这个子序列的和>0,并且这个和是所有和>0的子序列中最小的. 例如 ...

  4. [51nod1065]最小正子段和

    题意:求一个序列中大于0的最小子段和. 解题关键: 先求出前缀和和,对于每个位置求某个位置到当前位置和大于1的和的最小值.然而这是复杂度是O(n^2)的.其实可以通过排序优化到O(nlogn).对前缀 ...

  5. 51nod 1065 最小正子段和

    题目链接:51nod 1065 最小正子段和 房教说用前缀和做,然后看了别人博客懂了后就感觉,这个真有意思... #include<cstdio> #include<cstring& ...

  6. exgcd求解同余方程的最小正整数解 poj1061 poj2115

    这两题都是求解同余方程,并要求出最小正整数解的 对于给定的Ax=B(mod C) 要求x的最小正整数解 首先这个式子可转化为 Ax+Cy=B,那么先用exgcd求出Ax+Cy=gcd(A,C)的解x ...

  7. 通过交换a,b 中的元素,使[序列a 元素的和]与[序列b 元素的和]之间的差最小

    题目描述: 有两个序列a,b,大小都为n,序列元素的值任意整数,无序:要求:通过交换a,b 中的元素,使[序列a 元素的和]与[序列b 元素的和]之间的差最小.例如:var a=[100,99,98, ...

  8. AC日记——最小正子段和 51nod 1065

    最小正子段和 思路: 找最小的大于0的sum[j]-sum[i](j>i): 高级数据结构(splay)水过: 来,上代码: #include <cstdio> #include & ...

  9. ex_gcd求不定方程的最小正整数解

    #include<bits/stdc++.h> using namespace std; int gcd(int a,int b) {return b?gcd(b,a%b):a;} int ...

随机推荐

  1. angularJs获取复选框中id 进行批量删除

    主要思路:我们需要定义一个用于存储选中 ID 的数组,当我们点击复选框后判断是选择还是取消选择,如果是选择就加到数组中,如果是取消选择就从数组中移除.在点击删除按钮时需要用到这个存储了 ID 的数组. ...

  2. P3272 [SCOI2011]地板(插头DP)

    [题面链接] https://www.luogu.org/problemnew/show/P3272 [题目描述] 有一个矩阵,有些点必须放,有些点不能放,用一些L型的图形放满,求方案数 [题解] ( ...

  3. powershell和cmd区别

    Powershell是cmd的超集,换句话说,cmd能做的事情,Powershell都能做,但是Powershell还能额外做许多cmd不能做的活. 主要是系统管理功能.脚本语言和在线帮助更强大,你确 ...

  4. 单元测试mock框架——jmockit实战

    JMockit是google code上面的一个java单元测试mock项目,她很方便地让你对单元测试中的final类,静态方法,构造方法进行mock,功能强大.项目地址在:http://jmocki ...

  5. HttpClient,Socket,URL知识

    java中: tip/ip  , udp  传输协议 网络编程有三大类:Socket,URL,datagram HTTP协议是建立在TCP协议之上的一种应用. 一:HttpClient HttpCli ...

  6. python发送微信

    申请企业微信 使用python发送信息到企业微信,同时支持python2与python3环境,需要先申请一个企业微信,然后创建应用,获取以下三个信息 企业IP.Agentid.Secret 网信为创建 ...

  7. Xshell设置主机名高亮

    修改后的效果: 操作步骤: 情况①:如果是Ubuntu或者Debian,按照下面的流程,两步解决: 打开~/.bashrc. 修改参数force_color_prompt=yes去掉前面的注释#. 情 ...

  8. C# 序列化(Binary、Xml、Soap)

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  9. javascript判断input框只能输入数字的方法

    javascript 只允许输入数字有很多方法,总结如下 1,只允许输入数字和小数点. <input onKeypress="return (/[\d.]/.test(String.f ...

  10. DB Intro - MySQL and MongoDB

    mysql> CREATE TABLE tutorials_tbl( tutorial_id INT, tutorial_title VARCHAR(100), tutorial_author ...