最小正子序列(序列之和最小,同时满足和值要最小)(数据结构与算法分析——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: \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第二问)的更多相关文章
- 51nod-1065:最小正子段和(STL)
N个整数组成的序列a11,a22,a33,…,ann,从中选出一个子序列(aii,ai+1i+1,…ajj),使这个子序列的和>0,并且这个和是所有和>0的子序列中最小的. 例如:4,-1 ...
- 51nod 1065:最小正子段和
1065 最小正子段和 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 取消关注 N个整数组成的序列a[1],a[2],a[3],-,a[n],从中选出一 ...
- 51nod-1065 最小正子段和 【贪心 + 思维】
N个整数组成的序列a[1],a[2],a[3],-,a[n],从中选出一个子序列(a[i],a[i+1],-a[j]),使这个子序列的和>0,并且这个和是所有和>0的子序列中最小的. 例如 ...
- [51nod1065]最小正子段和
题意:求一个序列中大于0的最小子段和. 解题关键: 先求出前缀和和,对于每个位置求某个位置到当前位置和大于1的和的最小值.然而这是复杂度是O(n^2)的.其实可以通过排序优化到O(nlogn).对前缀 ...
- 51nod 1065 最小正子段和
题目链接:51nod 1065 最小正子段和 房教说用前缀和做,然后看了别人博客懂了后就感觉,这个真有意思... #include<cstdio> #include<cstring& ...
- exgcd求解同余方程的最小正整数解 poj1061 poj2115
这两题都是求解同余方程,并要求出最小正整数解的 对于给定的Ax=B(mod C) 要求x的最小正整数解 首先这个式子可转化为 Ax+Cy=B,那么先用exgcd求出Ax+Cy=gcd(A,C)的解x ...
- 通过交换a,b 中的元素,使[序列a 元素的和]与[序列b 元素的和]之间的差最小
题目描述: 有两个序列a,b,大小都为n,序列元素的值任意整数,无序:要求:通过交换a,b 中的元素,使[序列a 元素的和]与[序列b 元素的和]之间的差最小.例如:var a=[100,99,98, ...
- AC日记——最小正子段和 51nod 1065
最小正子段和 思路: 找最小的大于0的sum[j]-sum[i](j>i): 高级数据结构(splay)水过: 来,上代码: #include <cstdio> #include & ...
- ex_gcd求不定方程的最小正整数解
#include<bits/stdc++.h> using namespace std; int gcd(int a,int b) {return b?gcd(b,a%b):a;} int ...
随机推荐
- 解决maven项目中有小红叉的问题
首先在window--perferences--showview中显示problems中查看出错的原因
- Go语言基础之16--Mysql基本操作
一.Mysql驱动及数据库连接 1.1 Golang中的Mysql驱动 A. https://github.com/go-sql-driver/mysql B. Go本身不提供具体数据库驱动,只提供驱 ...
- Go语言基础之15--文件基本操作
一.文件读写 1.1 os.File os.File封装所有文件相关操作, 是一个自定义的struct. a. 打开一个文件进行读操作: os.Open(name string) (*File, er ...
- ansible部署,规划
部署管理服务器 第一步:先检查有没有ssh服务 [root@iZm5eeyc1al5vzh8bo57zyZ ~]# rpm -qf /etc/init.d/sshd openssh-server-5. ...
- 使用xUnit为.net core程序进行单元测试
第1部分: http://www.cnblogs.com/cgzl/p/8283610.html 第2部分: http://www.cnblogs.com/cgzl/p/8287588.html ...
- WebApi Helper帮助文档 swagger
http://www.it165.net/pro/html/201602/61437.htmlhttp://www.cnblogs.com/gossip/p/4546630.html ...
- 1.3 IDAE 中使用GO开发项目
创建GO文件 在GO项目的文件夹上右键,选择Go file,Kind选择简单应用,这样创建一个具有main入口的Go file 点击这个按钮,即可运行代码
- PHP、thinkPHP5.0开发网站文件管理功能(三)重命名文件
public function renames(){ if(request()->isAjax()){ $file = iconv('UTF-8','GB2312',urldecode(inpu ...
- Searching the Web论文阅读
Searching the Web (Arvind Arasu etc.) 1. 概述 2000年,23%网页每天更新,.com域内网页40%每天更新.网页生存半衰期是10天.描述方法可用Pois ...
- java 日志框架的选择Log4j->SLF4j->Logback
Log4j->SLF4j->Logback是同一个人开发的 import lombok.extern.slf4j.Slf4j; import org.junit.Test; import ...