最小正子序列(序列之和最小,同时满足和值要最小)(数据结构与算法分析——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 ...
随机推荐
- 字符串格式化str.format
一.字符串格式化之str.format 1.位置参数:用{0},{1},{2}表示位置 v1 = '{1},{0},{1}'.format('a','b') #输出b,a,b 2.关键词参数:用{na ...
- atcoder 2643 切比雪夫最小生成树
There are N towns on a plane. The i-th town is located at the coordinates (xi,yi). There may be more ...
- ie浏览器(Internet Explorer)不播放背景音乐
这里就不说bgsound了,支持格式较少 一个网站要加背景音乐,好些年没加背景音乐了,用embed标签把背景音乐加上了,Mozilla Firefox,Google Chrome,Safari都正常, ...
- POJ 1000 A+B
#include <stdio.h> int main() { int a,b; scanf("%d %d",&a, &b); printf(" ...
- linux 数据库管理
1.安装数据库: yum install mariadb.serversystemctl staus mariadbsystemctl start mariadbsystemctl enable ma ...
- jquery插件分页
收藏地址: http://www.jq22.com/yanshi5697
- c++中enum 如何使用(转)
ENUM概况 enum枚举类型是C/C++中的一种数据类型,与struct和class一样是用户自定义的类型,其特点在于enum类型的变量取值是有限的,是可以一一列举出来的. ENUM定义 C++ e ...
- 工作必备,五分钟如何搞定Excel甘特图
工作必备,五分钟如何搞定Excel甘特图 https://www.sohu.com/a/212628821_641930 EXCEL中如何给图表添加标题 1.选中图表 >> [布局] 菜 ...
- ubuntu ifconfig 不显示IP地址
本文转载:https://blog.csdn.net/cmh477660693/article/details/52760236 ubuntu终端下命令ifconfig的问题解决 问题一. ifcon ...
- Vue.js-----轻量高效的MVVM框架(四、指令)
Vue指令 指令 (Directives) 是特殊的带有前缀 v- 的特性.指令的值限定为绑定表达式,因此上面提到的 JavaScript 表达式及过滤器规则在这里也适用.指令的职责就是当其表达式的值 ...