c语言编译的最大子序列求和问题

定(可能有负数)整数序列A1, A2, A3..., An,求这个序列中子序列和的最大值。(为方便起见,如果所有整数均为负数,则最大子序列和为0)。

c

13个回答

  1. 代码已全部改成C风格,
  2. 代码已C测试通过
  3. 已经加上题解和思路
  4. 又不会可以记叙文

可以参考我的:https://blog.csdn.net/qq_33957603/article/details/80554648

以及代码提交(验证正确)地址:http://www.joyoi.cn/problem/tyvj-1305

###传统的做法是,枚举(只要对的话就够了
如果n<=10^3,我们很容易写出枚举(s是前缀和,区间[l,r]的和就是s[r]-s[l-1]。枚举l,r即可。

 #include<stdio.h>
#define maxn 300010
#define max(a,b) (a>b?a:b)
int a[maxn], q[maxn];
long long s[maxn], ans;
int main(){
    int n, m;
    scanf("%d%d",&n,&m);
    for(int i = 1; i <= n; i++){
        scanf("%d",&a[i]);  s[i]=s[i-1]+a[i];
    }
    for(int i = 1; i <= m; i++)//枚举长度
        for(int j = i; j <= n; j++)//枚举r
            ans = max(ans, s[j]-s[j-i]);//可以算出l
    printf("%d\n",ans);
    return 0;
}

###如果需要更快的,,,可以考虑用单调队列

  • 如果右端点是i,那么就转为求一个左端点j属于[i-m,i-1]并且s[j]最小。并且j越靠近m一定是越优的(在后面更不容易超过m。
  • 所以选择集合一定是,“下标位置递增,对应前缀和s也递增”的序列,我们可以用队列保存这个序列。
#include<stdio.h>
#define max(a,b) (a>b?a:b)
#define maxn 300010
using namespace std;
int a[maxn], q[maxn];
long long s[maxn], ans;
int main(){
    int n, m;
    scanf("%d%d",&n,&m);
    for(int i = 1; i <= n; i++){
        scanf("%d",&a[i]);  s[i]=s[i-1]+a[i];
    }
    int l = 1, r = 1;
    q[l] = 0; //save j
    for(int i = 1; i <= n; i++){
        while(l<=r && q[l]<i-m)l++;
        ans = max(ans, s[i]-s[q[l]]);
        while(l<=r && s[q[r]]>s[i])r--;
        q[++r] = i;
    }
    printf("%d\n",ans);
    return 0;
}

参考这个程序 https://blog.csdn.net/linux_ever/article/details/50464947
c语言只要把输入输出换成scanf printf即可。

pat_ti
HEIMIIY 5 IntelliSense: 无法识别的标记 100多个这种相同的错误
一年多之前 回复
pat_ti
HEIMIIY 可以发你Q问你吗
一年多之前 回复
caozhy
贵阳老马马善福专门编写代码的老马就是我! 回复pat_ti: 贴出你的程序和错误提示(找不到什么文件),我看下。
一年多之前 回复
pat_ti
HEIMIIY 回复caozhy: 有改IO 没有头文件
一年多之前 回复
pat_ti
HEIMIIY 回复caozhy: VS2012 对 有头文件吗
一年多之前 回复
caozhy
贵阳老马马善福专门编写代码的老马就是我! 回复pat_ti: 你是c语言的话,需要修改下io,不要包含c++ 的头文件,这些你都修改了?
一年多之前 回复
caozhy
贵阳老马马善福专门编写代码的老马就是我! 回复pat_ti: 你用的什么编译器,少头文件?
一年多之前 回复
pat_ti
HEIMIIY 但它还是会显示 系统找不到指定文件。。。
一年多之前 回复

方法有很多,效率比较高的是分治法(O(nlogn))和动态规划法(O(n))。
动态规划法:

 int MaxSum(int *arr, int n)
{
    int sum = 0, b = 0;
    for (int i = 0; i < n; i++)
    {
        if (b > 0)
            b += arr[i];
        else
            b = arr[i];
        if (b > sum)
            sum = b;
    }
    return sum;
}

int MaxSubsequenceSum( const int A[],int N)
{
int ThisSum,MaxSum,i;
ThisSum=0;
MaxSum=0;
for(i=0;i ThisSum+=A[i];
if(ThisSum>MaxSum){
MaxSum=ThuisSum;
}else if(ThisSum<0){
ThisSum=0;}}
retu}rn Maxsum;

#include
#include

long seriesMaxSum(int *series, size_t n);

void main(size_t argc, char **argv) {
if (argc > 1) {
int *series;
size_t counter;

    if (!(series = malloc((argc - 1) * sizeof(int)))) {
        fprintf(stderr, "Out of memory...\n");
        return;
    }

    for (counter = 1; counter < argc; counter++) 
        *(series + (counter - 1)) = atoi(argv[counter]);

    printf("The biggest sum in the series is: %ld\n", seriesMaxSum(series, argc - 1));
} else
    printf("<Usage>: ./%20s [series]\nExample: ./%20s (\\d+\\s)+\n", argv[0], argv[0]);

}

long seriesMaxSum(int *series, size_t n) {
long partialSum = 0, biggestSum = 0;
size_t index;

for (index = 0; index < n; index++) {
    if ((partialSum + series[index]) >= partialSum) {
        if ((partialSum += series[index]) >= biggestSum)
            biggestSum = partialSum;
    } else
        partialSum = 0;
}

return biggestSum;

}

1.1 分解:这个数组只能出现在三个位置:从中间分,要么完全在左边,要么完全在右边,要么穿过中间,所以分三部分求最大
1.2 求解:如果在左边或右边继续分,最后只剩一个数返回,对于穿过中间的,分成两部分求最大,每次都如此。
1.3 组合:每次返回左边,右边,中间这三个中最大的
class Solution {
public int maxSubArray(int[] nums) {
return findMax(nums,0,nums.length-1);
}
public static int findMax(int []num,int left,int right){
if (left>=right)return num[left];
int mid=(left+right)/2;
//寻找左边最大
int lmax=findMax(num,left,mid-1);
//寻找右边最大
int rmax=findMax(num,mid+1,right);
//寻找中间最大,并分成两部分,找从中间左边连续最大,中间到右边连续最大,最后加起来
int mmax=num[mid],t=mmax;
for (int i=mid-1;i>=left;i--){
t+=num[i];
mmax=Math.max(mmax,t);
}
t=mmax;
for (int i=mid+1; i<=right; i++){
t+=num[i];
mmax=Math.max(mmax,t);
}
//合并
return Math.max(mmax,Math.max(lmax,rmax));
}
}

求最大的子序列和问题
给定整数A1,A2,....An,....(可能有负数),求该数据序列的最大子序列的和。
比如:输入-2, 11, -4, 13, -5, -2; 答案是20(11,-4,13三个连续数字的和)

我们遍历一次数据序列,当每次的this_sum大于最大值的时候就更新max_sum的值。当this_sum小于0的时候,就把它置为0,再从当前位置开始计算(每次求和的结果小于0,就从下一个数据开始求和)。还有一点要清楚,最大序列的第一个数字不可能小于0。可以看出该算法的时间复杂度是O(n);
该问题还有其它几种时间复杂度比较高的算法。具体看:数据结构与算法分析C++描述(2.3章节)

[cpp] view plain copy
/*************************************************************************
> File Name: max_seq_sum.cpp
> Author:

> Mail:

> Created Time: 2016年01月05日 星期二 19时49分30秒
************************************************************************/

#include

#include

using namespace std;

void input_data(vector & data)

{

int tmp;

cout << "输入数据序列:" << endl;  
while(cin >> tmp){  
    data.push_back(tmp);  
}  

}

void output_data(vector & data)

{

cout << "输入的数据序列:" << endl;

for (int i = 0; i < data.size(); ++i)

cout << data[i] << " ";

cout << endl;

}

int max_seq_sum(vector & data)

{

int max_sum = 0, this_sum = 0;

for (int i = 0; i < data.size(); ++i){

this_sum += data[i];

    if(this_sum > max_sum)  
        max_sum = this_sum;  
    else if(this_sum < 0)  
        this_sum = 0;  
}  
return max_sum;  

}

int main()

{

vector data;

//输入数据

input_data(data);

output_data(data);  

cout << "最大序列的值是: ";  
cout << max_seq_sum(data) << endl;  

return 0;  

}

include

int main(void)

{

int n, a[100001];

while (~ scanf("%d", &n))

{

int i;

for (i = 1; i <= n; i ++)

scanf("%d", &a[i]);

int sum = a[1], min = a[1]; // 初始值

for (i =2; i <= n; i ++)

{

if (sum <= 0)

sum = a[i]; // 如果前面位置最大连续子序列和小于0, 就讲此时的位置的值记录下来

else

sum += a[i]; // 如果大于0, 就继续相加。

        if (sum > min)   
            min = sum;  
     }   
     printf("%d\n", min);   
}  
return 0;      

}

这个如果输入的是
5
-1 -2 -3 -4 -5
输出的是-1
你可以加一个循环判断 如果都是负的话 输出0即可

另外命名一个数组b[n],当An为正数计入b[n],因为为负数时2求和值会变小,所以只累计大于0的数,只需要将b[n]求和就可以了。
#include 'stdio.h'
int Max(int n, int *b)
{
int m=0, sum=0;//设m为求和中间变量
int i;
for(i=0; i {
if (m>0)
m+=b[i];
else
m=b[i];
if(m>=sum)
sum=m;
else
sum=0;
}
return sum;
}

include 'stdio.h'
int max(int *a){
int sum = 0
for(int i = 0;i if(sum sum = 0;
if(a[i]>0){
sum+=a[i];
}

}
        return sum;
}
共13条数据 1 尾页
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
最大子序列求和最大子序列求和
最大子序列求和
C语言 最大子序列求和完整程序
1.测试100% # include long long MaxSubSequenceSum_4(long long A[], long long N) { long long ThisSum,MaxSum,i; ThisSum=0; MaxSum=A[0];//注意 for(i=0;i<N;i++) { ThisSum+=A[i]; if(Th
最大子序列求和
最大子序列求和 c语言
最大子序列求和问题
最大子序列求和问题最优算法 package programme; public class SumOfSubArr { public static void main(String[] args) { System.out.println(maxSubSum(new int[] { 4, -3, 5, -2, -1, 2, 6, -2 })); } public static...
最大子序列求和整理笔记
在最大子序列的问题中,这里有四种解法,时间复杂度由高到低,可以直观的感受到解决问题的算法技巧。c语言代码如下:#include <stdio.h> #define maxn 100int A[maxn]; //输入 void Input(int a[],int n) { int i; for(i=0;i<n;i++) scanf("%d",&a[i]); } //输出
求和最大子序列(leetcode53)
给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 示例: 输入: [-2,1,-3,4,-1,2,1,-5,4], 输出: 6 解释: 连续子数组 [4,-1,2,1] 的和最大,为 6。 进阶: 如果你已经实现复杂度为 O(n) 的解法,尝试使用更为精妙的分治法求解。 分治法 class Solution { public: int ...
最大子序列求和动态规划
#include<iostream> using namespace std; void Maxsum(int n,int a[]){ int sum=0; int b=0; int i; for(i=1;i<=n;i++){ if(b>0) b+=a[i]; else b=a[i]; if(b>sum) sum=b; } cout<<"整数序列最大子段和是:"<<sum<<endl; } void main(){ int n,a[100],m,maxsum; cout<<"请输入整数序列的元素个数n"<<endl; cin>>n; cout<<"请输入各元素的值:"<<endl; for(m=0;m<=n;m++) cin>>a[m]; Maxsum(n,a); }
1.1 最大子序列求和
题目大意:给出一序列,求该序列的子序列和最大的子序列。 下面共有四种算法:程序运行时间依次降低,最佩服的是最后的联机算法,时间已达到O(N). 注意C++中的函数调用与传值 #include<iostream> #include<vector> #include<algorithm> using namespace std; //最大子序列求和 //算法一 //穷举法 int maxsubs
最大子序列求和详解
主要是课堂PPT上的内容,但是觉得很有启发意义,遂记录下来 题目 给定(可能是负的)整数序列A1,A2。。。An,寻找(并标识)值为最大的序列。如果所有的整数都是负的,那么最大连续子序列的和是零。 例如,假设输入是{-2, 11, -4, 13, -5, 2},那么答案是20,它表示连续子序列包含了第2项到第4项(如粗体字部分)。又如第二个例子,对于输入{1, -3, 4, -2, -1...
Weiss-(DSAA - in C,2.12)最大子序列求和
最大子序列求和: A[] = {-7,5,-2,15,1,0,4}  方法1:二分法:  (1).分解成最小子问题     left  {-7,5,-2}         right  {15,1,0}  /*1     left {-7,5}   right{-2}      left{15,1}  right {0}  /*2    left right {-7} {5}
数据结构与算法分析 学习笔记——最大子序列求和问题
#include<stdio.h> int main() { int K,max=0,now=0; scanf("%d",&K); int a[K]; int i=0,j=0; for(;i<K;i++) scanf("%d",&a[i]); max+=a[0]; for(i=0;i<K-1;i++) {
C语言编译的问题
首先,请看代码,最后面提问题:rnrn我从百度里抄了一个代码:rn[code=c]rn#include #include rnrnenum RED, GREEN, BLUE ;rnrnvoid OutputSignal(int sig)rnrnrnrn printf("The signal you /'ve input is: ");rnrn switch(sig)rnrn rnrn case RED:rnrn puts("RED!");rnrn break;rnrn case GREEN:rnrn puts("GREEN!");rnrn break;rnrn case BLUE:rnrn puts("BLUE!");rnrn break;rnrn rnrnrnrnvoid ( *signal( int sig, void (*func)(int) ) ) (int)rnrnrnrn puts("Hello, world!");rnrn func(sig);rnrn return func;rnrnint main(void)rnrnrnrn (*signal(GREEN, &OutputSignal))(RED);rnrn return 0;rnrnrn[/code]rn===================rnrn问题来由:rnrn首先,我在VC++6.0里面编译,结果,编译通过,重建失败,失败的提示为:rnrnLIBCD.lib(winsig.obj) : error LNK2005: _signal already defined in a.objrnrnDebug/a.exe : fatal error LNK1169: one or more multiply defined symbols foundrnrn执行 link.exe 时出错.rnrn后来,我用命令行编译,如下:rn[code=c]rnC:\Documents and Settings\Administrator>F:rnrnF:\>cd use_C_etcrnrnF:\use_C_etc>cl a.crn[/code]rn编译通过,并且输出结果:rn[code=c]rnHello, world!rnrnThe signal you /'ve input is: GREEN!rnrnThe signal you /'ve input is: RED!rnrn[/code]rnrnrn问题:rnrn1、为什么我用VC编译就错了!到底错在哪?rnrn2、为什么命令行就对了,这个中差别在哪?rn
c语言的编译问题
我想用c写一个可以在裸机上运行的程序,编译后,用汇编写了个加载的程序,在虚拟机里运行的时候作用,因为是用32位的gcc在windows下写的,以为是模式的问题,然后就在Turbo c 上编译了,也没有用。这个c的代码里并没有用其他的库,甚至没有头文件的引用,可是为什么在吧编译的程序反汇编后发现依然有系统的函数或者中断调用,事实上代码里根本就没有任何的系统函数或者中断调用啊,都是自己写的,而且看linux0.11版本的内核代码时发现出了引导加载程序是汇编写的,其他的都是用c写的啊,那内核是怎么编译的呢?求解,先谢谢了。
c语言编译问题
在ubuntu下gcc编译一个简单的c程序,我用的是静态编译。rn命令如下:rngcc -static hello.h rn完成后把可执行文件a.out 放到另一操作系统FC4下却无法执行并出现segmentation fault 错误。请问为什么。
c语言编译的问题
如:rn在1.c文件中的代码如下:rn#include "stdio.h"rnvoid vi (Elem i) rnprintf("%d",i);rnrn在main.c中代码如下:rntypedef int Elem;rn#incldue "1.c"rnint main () rnvi (5);rnreturn 0;rnrnrn//在code::Block可以正常的运行。但在vc上就不可以了。rn还有一个问题就是:rnc编译是文件为单位的,1.c文件也编译吗?如果编译的话,按理说Elem没有定义,应该不可以通过编译呀?rn还有就是:rn在main.c中使用了#include“1.c”rn由于typedef int Elem定义了Elem。rn所以main.c中的代码为:rntypedef int Elem;rn#include "stdio.h"rnvoid vi (Elem i) rnprintf("%d",i);rnrnint main () rnvi (5);rnreturn 0;rnrn是吗?rn请高手解答?谢谢!
C语言的编译问题
传说中,c语言的编译器是用c语言写的。我搞不明白的是c语言要转化成机器语言,如何通过自身实现?我给出的形象的比喻就是一个说中文的如何用中文来解释给英国人听——这不是自相矛盾的吗?
C 语言编译问题?
rn 在UNIX下用CC 对C程序进行编译时,编译器对外部函数不进行检查.例如:程序调用一个外部函数比如:Function,但是写成Functionerror也检查不出错误?rn 另外,连接器什么时候用?怎么用?rn 多谢!
C语言编译问题
Windows操作系统下,一个简单的C源代码经过编译后生成可执行文件,这个可执行文件是运行在操作系统上的,要调用操作系统提供的接口函数。rnrn我的问题:rn拿操作系统来说,无论windows系统还是linux,都是由C语言、汇编或者C++编写的(这里先不管具体用什么语言编写的),这些操作系统源代码经过编译后就是操作系统文件。rn1.那么这些经过编译的操作系统文件里面都是机器码,是cpu指令集吗?rn2.和之前在操作系统环境下编译生成的可执行文件不同是因为编译器的原因吗?rnrn希望有大侠指点一下,非常感谢rn
C语言求和程序
ADD是自定义的函数,程序从main函数开始执行,执行到scanf时,等待用户等待用户从键盘输入两个整型数据后再继续执行。 ADD函数的功能是将入口参数
C语言——数字求和
Description  给定一个正整数a,以及另外的5个正整数,问题是:这5个整数中,小于a的整数的和是多少? Input  输入一行,只包括6个小于100的正整数,其中第一个正整数就是a。 Output  输出一行,给出一个正整数,是5个数中小于a的数的和。 Sample Input  10 1 2 3 4 11 Sample Output  10 #include&amp;...
C语言:数字求和
题目: #include &amp;lt;stdio.h&amp;gt; int main() { int a,n,s=0,i=1,b; scanf(&quot;%d%d&quot;,&amp;amp;a,&amp;amp;n); b=a; while(i&amp;lt;=n) { s+=a; a=a*10+b; i++; } printf(&quot;%d&quot;,s); return 0; }
数组遍历及求和(C语言)
最近学习了C语言的入门,作为数组的综合练习,在此写下相关经验及代码。 题目:在一个长度为10的整型数组里面,保存了班级10个学生的考试成绩。要求编写5个函数,分别实现计算考试的总分,最高分,最低分,平均分和考试成绩降序排序。 代码部分:#include int totalClass(int score[]) //求班级总分 { int sum = 0; for(int i=0
c语言求和2m-100
2m~100的和 c语言课程上的,有需要下
c语言多项式求和
这是我用c语言写的程序,我的其他资源都是免费的,是对于c语言初学者的帮助比较大的,其中有数据结构,window编程。我也在学c语言,每当我写完一个程序,我都会免费发上来。
C语言求和
最近遇到很多 求和,,有谁会很多求和的基础,累乘,累加,等等。。有链接也可以,系谢谢啦[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/monkey/8.gif][/img]
求和函数(C语言)
#include &lt;stdio.h&gt; void sum(int begin,int end) { int i; int sum=0; for(i=begin;i&lt;=end;i++){ sum += i; } printf("%d到%d的和是%d。\n",begin,end,sum); } int main() {int x,y; scanf("%d %d",&amp;x,&...
数据结构---最大子序列算法(不同时间复杂度 C语言)
时间复杂度 一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n))为算法的渐进时间复杂度(O是数量级的符号 ),简称时间复杂度。 ...
【C语言】1-100求和;1-N求和
(1)for循环: #include&lt;stdio.h&gt; int main() { int i;//循环变量 int sum=0;//求和结果数 //int n; //printf("请输入N="); //printf("%d",&amp;n); for(i=1;i&lt;=100;i++) { sum+=i...
C 最大子序列算法
C 最大子序列问题的几中算法-分治-联机算法
最大子序列的和问题
问题描述:给出一个整数数组:a1, a2, a3, … … an;求最大的子序列和(如果数组都为负数,则为0)方法1:遍历求解 从数组的首元素a1开始遍历,一直累加ak,求出最大值。maxsum: 要求的最大子序列和, tempsum: a[i]+a[i+1]+a[i+2]+…+a[n-1];(0<=1//O(N^2) int maxfun(int a[], int n) {
hdoj 1003 Max Sum---动态规划,最大子序列求和
初来乍到,动态规划不会呀,刚开始用暴力法,超时了!超时代码如下:思路:大致是选中一个数当做结尾,然后加和。例如在6 -1 5 8 -7选中5作为结尾大致有如下序列6  -1   5    -1   5          5就这样遍历所以的结尾,结果超时。代码如下:#include&amp;lt;iostream&amp;gt; #include&amp;lt;algorithm&amp;gt; using namespace s...
《数据结构与算法分析》第二章,最大子序列求和递归看不懂。。。
这本书很多人应该都看过。其实很早之前我就尝试着看这本书,只是这个最大子序列求和的递归rn算法实在看不懂,然后就先不看。没想到过了这么久,现在还是看不懂[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/onion/7.gif][/img]rnrn惯例先贴代码rn[code=c]rn#include rnrn/*求三个整数中最大的数*/rnint Max(int a, int b, int c) rn int max = 0;rn if (a > b)rn max = a;rn elsern max = b;rnrn if (max > c)rn return max;rn elsern return c;rnrnrn/*参数Left和Right分别为传入数组的左右边界*/rnint MaxSubSum(const int A[], int Left, int Right) rn int MaxLeftSum, MaxRightSum; /*将数组分为左右两半后,左边和右边的子序列最大值*/rn int MaxLeftBorderSum, MaxRightBorderSum;rn int LeftBorderSum, RightBorderSum;rn int Center, i;rnrn if (Left == Right)rn rn if (A[Left] > 0)rn return A[Left];rn elsern return 0;rn rnrn /*递归算法开始,好吧,我看不懂...*/rn Center = (Left + Right) / 2;rn MaxLeftSum = MaxSubSum(A, Left, Center);rn MaxRightSum = MaxSubSum(A, Center + 1, Right);rnrn MaxLeftBorderSum = 0;rn LeftBorderSum = 0;rnrn for (i = Center; i >= Left; i--)rn rn LeftBorderSum += A[i];rn if (LeftBorderSum > MaxLeftBorderSum)rn MaxLeftBorderSum = LeftBorderSum;rn rnrn MaxRightBorderSum = 0;rn RightBorderSum = 0;rnrn for (i = Center + 1; i <= Right; i++)rn rn RightBorderSum += A[i];rn if (RightBorderSum > MaxRightBorderSum)rn MaxRightBorderSum = RightBorderSum;rn rnrn return Max(MaxLeftSum, MaxRightSum, MaxLeftBorderSum + MaxRightBorderSum);rnrnrn/*Main函数输出最终结果,无实意*/rnint main(int argc, char * argv[])rnrn int array[10] = 4, -3, 12, 9, -7, 15, -16, 2, 8, -1 ;rn int max = MaxSubSum(array, 0, 9);rn printf("What...\n");rn printf("max = %d" , max);rnrn[/code]rnrn对于这三行核心代码,我是真不明白到底怎么运行的,画图后更糊涂了。。。rn[code=c]rn Center = (Left + Right) / 2;rn MaxLeftSum = MaxSubSum(A, Left, Center);rn MaxRightSum = MaxSubSum(A, Center + 1, Right);rnrn[/code]rnrn好吧,假设现在只传五个数的数组 int array[] = 12, 3, 5, 6, -1 ,rn调用MaxSubSum(array, 0, 4)rn第一次执行到递归代码时,是酱紫:rn[code=c]rnCenter = 2;rnMaxLeftSum = MaxSubSum(array, 0, 2);rn[/code]rn进入递归 ---------(第一层递归) [color=#FF0000]Left = 0, Right = 2[/color]rn第二次执行到递归代码时:rn[code=c]rnCenter = 1;rnMaxLeftSum = MaxSubSum(array, 0, 1);rn[/code]rn进入下一层递归---------(第二层递归) [color=#FF0000]Left = 0, Right = 1[/color]rn第三次执行时:rn[code=c]rnCenter = 0;rnMaxLeftSum = MaxSubSum(array, 0, 0); [/code]rn进入下一层递归---------(第三层递归) [color=#FF0000]Left = 0, Right =0[/color]rn终于Left == Right了, 于是return array[0];rnrn返回第二层递归,执行下一条语句:rn[code=c]rnMaxRightSum = MaxSubSum(array, 0, 1);[/code]rnrn这尼玛。。。 不是又重复了一遍么。这到底什么意思,我表示大脑空间溢出了。。。rn我也没看到递归里有加法运算哪,最后怎么就得出了左右两半数组的最大子序列和?rn小弟分少,哎,就意思意思吧。rn好吧,我弱爆了,求大神指点迷津啊,老衲法号戒撸[img=https://forum.csdn.net/PointForum/ui/scripts/csdn/Plugin/003/onion/9.gif][/img]
Keil C语言编译问题
本人编译一程序出现如下编译结果,据自己估计不是源代码语法上面的错误。请大家指教错在哪,以及如何更正rnrnBuild target 'Target 1'rncompiling Text1.c...rnlinking...rnBl51 BANKED LINKER/LOCATER V4.13 - SN: Eval VersionrnCOPYRIGHT KEIL ELEKTRONIK GmbH 1987-2001rn"Text1.obj"rnTO"11"rn***FATAL ERROR L210:I/O ERROR ON INPUT FILE:rn EXCEPTION 0021HATH OR FILE NOT FOUNDrn FILE:\PROGRAM FILES\KEIL\C51\LIB\C51FPS.LIBrnTarget not created
有关C语言编译的问题。
#include rnmain()rnrn clearscreen(GCLEARSCREEN);rnrn//错误:Unable to open the include file "GRAPH.H"rn//而在有的机子上却没有错,不知是何缘故?
Eclipse编译C语言的问题
我按照网上的人说的下载了Eclipse3.2和对应的CDT,把CDT解压后复制到对应的目录,先前已经安装了MinGW。rn打开Managed C++ Project。rn创建了个C项目。rn写了个最简单的C程序,可是Build后出现以下错误,不知道怎么弄了。rnrn**** Build of configuration Debug for project 2 ****rnmake -k all rn'Building file: ../2.c'rn'Invoking: GCC C Compiler'rngcc -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"2.d" -MT"2.d" -o"2.o" "../2.c"rn'Finished building: ../2.c'rn' 'rn'Building target: 2.exe'rn'Invoking: GCC C Linker'rngcc -o"2.exe" ./2.o rnC:/MinGW/bin/../lib/gcc/mingw32/3.4.5/../../../libmingw32.a(main.o):main.c:(.text+0x104): undefined reference to [url=mailto:`WinMain@16]`WinMain@16'[/url]rncollect2: ld returned 1 exit statusrnmake: *** [2.exe] Error 1rnmake: Target `all' not remade because of errors.rnBuild complete for project 2rnrnrn出现undefined reference to [url=mailto:`WinMain@16]`WinMain@16'[/url]错误。rn不可以编译C程序。rn
关于C语言编译问题
在C语言中,一般情况下如下方式编译时会出错的。因为变量的定义必须在函数的最开始(除了使用)。rnvoid func(void)rnrn int i;rn i = 0;rn int j;rnrn请问:不知道有没有编译选项可以让编译器对这种情况认可?
关于C语言编译的问题
最近编译一个C程序A时报错 /home/cpicsrv/lib/libic.a(insclmpreacct.o)(.text+0x8e4): In function `insclmpreacct': : undefined reference to `get_insrnc_code' 此类报错为编译顺序的原因。在编译C程序A时,调用到部分方法中存在未编译的部分。 根据报错可以确定 在编译
Linux下的C语言编译问题 ~~~
Linux下编译,生成不了.la文件是怎么回事,这样的rnrnrep: /usr/lib/libglib.la: No such file or directoryrn/usr/bin/sed: can't read /usr/lib/libglib.la: No such file or directoryrnlibtool: link: `/usr/lib/libglib.la' is not a valid libtool archivernmake: *** [libapdmy.la] rnrn有好多,跪求大神求解
VC编译C语言问题
我先编了一个CPP格式的程序在VC6中,rn当把CPP改成C为后缀名的时候,rn出现一大堆的错,请帮帮忙!rn[code=C/C++]1>------ 已启动生成: 项目: mesh, 配置: Debug Win32 ------rn1>正在编译...rn1>mesh.crnerror C2143: 语法错误 : 缺少“;”(在“类型”的前面)rnreadfile.h(46) : error C2143: 语法错误 : 缺少“;”(在“类型”的前面)rnreadfile.h(46) : error C2143: 语法错误 : 缺少“;”(在“类型”的前面)rnreadfile.h(46) : error C2143: 语法错误 : 缺少“)”(在“类型”的前面)rnreadfile.h(46) : error C2143: 语法错误 : 缺少“;”(在“类型”的前面)rnreadfile.h(46) : error C2065: “ixVertice”: 未声明的标识符rnreadfile.h(46) : warning C4552: “<”: 运算符不起任何作用;应输入带副作用的运算符rnreadfile.h(46) : error C2065: “ixVertice”: 未声明的标识符rnreadfile.h(46) : error C2059: 语法错误 : “)”rnreadfile.h(47) : error C2143: 语法错误 : 缺少“;”(在“”的前面)rnreadfile.h(50) : error C2065: “face_type”: 未声明的标识符rnreadfile.h(50) : error C2065: “pface”: 未声明的标识符rnreadfile.h(50) : warning C4047: “=”: “int”与“face_type *”的间接级别不同rnreadfile.h(50) : error C2106: “=”: 左操作数必须为左值rnreadfile.h(51) : error C2143: 语法错误 : 缺少“;”(在“类型”的前面)rnreadfile.h(51) : error C2143: 语法错误 : 缺少“;”(在“类型”的前面)rnreadfile.h(51) : error C2143: 语法错误 : 缺少“)”(在“类型”的前面)rnreadfile.h(51) : error C2143: 语法错误 : 缺少“;”(在“类型”的前面)rnreadfile.h(51) : error C2065: “ix”: 未声明的标识符rnreadfile.h(51) : warning C4552: “<”: 运算符不起任何作用;应输入带副作用的运算符rnreadfile.h(51) : error C2065: “ix”: 未声明的标识符rnreadfile.h(51) : error C2065: “pface”: 未声明的标识符rnreadfile.h(51) : error C2059: 语法错误 : “)”rnreadfile.h(52) : error C2143: 语法错误 : 缺少“;”(在“if”的前面)rnreadfile.h(52) : error C2065: “pface”: 未声明的标识符rnreadfile.h(52) : error C2223: “->v1”的左侧必须指向结构/联合rnreadfile.h(52) : error C2065: “ixVertice”: 未声明的标识符rnreadfile.h(53) : error C2065: “ts”: 未声明的标识符rnreadfile.h(53) : error C2109: 下标要求数组或指针类型rnreadfile.h(53) : error C2065: “ix”: 未声明的标识符rnreadfile.h(55) : error C2065: “pface”: 未声明的标识符rnreadfile.h(55) : error C2223: “->v2”的左侧必须指向结构/联合rnreadfile.h(55) : error C2065: “ixVertice”: 未声明的标识符rnreadfile.h(56) : error C2065: “ts”: 未声明的标识符rnreadfile.h(56) : error C2109: 下标要求数组或指针类型rnreadfile.h(56) : error C2065: “ix”: 未声明的标识符rnreadfile.h(58) : error C2065: “pface”: 未声明的标识符rnreadfile.h(58) : error C2223: “->v3”的左侧必须指向结构/联合rnreadfile.h(58) : error C2065: “ixVertice”: 未声明的标识符rnreadfile.h(59) : error C2065: “ts”: 未声明的标识符rnreadfile.h(59) : error C2109: 下标要求数组或指针类型rnreadfile.h(59) : error C2065: “ix”: 未声明的标识符rnreadfile.h(62) : error C2065: “normal”: 未声明的标识符rnreadfile.h(62) : error C2146: 语法错误 : 缺少“;”(在标识符“pn”的前面)rnreadfile.h(62) : error C2065: “pn”: 未声明的标识符rnreadfile.h(63) : error C2065: “pn”: 未声明的标识符rnreadfile.h(63) : error C2224: “.x”的左侧必须具有结构/联合类型rnreadfile.h(63) : error C2065: “pn”: 未声明的标识符rnreadfile.h(63) : error C2224: “.y”的左侧必须具有结构/联合类型rnreadfile.h(63) : error C2065: “pn”: 未声明的标识符rnreadfile.h(63) : error C2224: “.z”的左侧必须具有结构/联合类型rnreadfile.h(64) : error C2143: 语法错误 : 缺少“;”(在“类型”的前面)rnreadfile.h(65) : error C2143: 语法错误 : 缺少“;”(在“类型”的前面)rnreadfile.h(65) : error C2143: 语法错误 : 缺少“;”(在“类型”的前面)rnreadfile.h(65) : error C2143: 语法错误 : 缺少“)”(在“类型”的前面)rnreadfile.h(65) : error C2143: 语法错误 : 缺少“;”(在“类型”的前面)rnreadfile.h(65) : error C2065: “jx”: 未声明的标识符rnreadfile.h(65) : warning C4552: “<”: 运算符不起任何作用;应输入带副作用的运算符rnreadfile.h(65) : error C2065: “jx”: 未声明的标识符rnreadfile.h(65) : error C2059: 语法错误 : “)”rnreadfile.h(66) : error C2143: 语法错误 : 缺少“;”(在“”的前面)rnreadfile.h(67) : error C2065: “ixFace”: 未声明的标识符rnreadfile.h(67) : error C2065: “ts”: 未声明的标识符rnreadfile.h(67) : error C2065: “jx”: 未声明的标识符rnreadfile.h(67) : error C2109: 下标要求数组或指针类型rnreadfile.h(68) : error C2065: “pn”: 未声明的标识符rnreadfile.h(68) : error C2224: “.x”的左侧必须具有结构/联合类型rnreadfile.h(68) : error C2065: “ixFace”: 未声明的标识符rnreadfile.h(69) : error C2065: “pn”: 未声明的标识符rnreadfile.h(69) : error C2224: “.y”的左侧必须具有结构/联合类型rnreadfile.h(69) : error C2065: “ixFace”: 未声明的标识符rnreadfile.h(70) : error C2065: “pn”: 未声明的标识符rnreadfile.h(70) : error C2224: “.z”的左侧必须具有结构/联合类型rnreadfile.h(70) : error C2065: “ixFace”: 未声明的标识符rnreadfile.h(72) : error C2065: “pn”: 未声明的标识符rnreadfile.h(72) : error C2224: “.x”的左侧必须具有结构/联合类型rnreadfile.h(73) : error C2065: “pn”: 未声明的标识符rnreadfile.h(73) : error C2224: “.y”的左侧必须具有结构/联合类型rnreadfile.h(74) : error C2065: “pn”: 未声明的标识符rnreadfile.h(74) : error C2224: “.z”的左侧必须具有结构/联合类型rnreadfile.h(77) : error C2275: “GLfloat”: 将此类型用作表达式非法rn1> c:\program files\microsoft sdks\windows\v6.0a\include\gl\gl.h(53) : 参见“GLfloat”的声明rnreadfile.h(77) : error C2146: 语法错误 : 缺少“;”(在标识符“len”的前面)rnreadfile.h(77) : error C2065: “len”: 未声明的标识符rnreadfile.h(77) : error C2065: “pn”: 未声明的标识符rnreadfile.h(77) : error C2224: “.x”的左侧必须具有结构/联合类型rnreadfile.h(77) : error C2065: “pn”: 未声明的标识符rnreadfile.h(77) : error C2224: “.x”的左侧必须具有结构/联合类型rnreadfile.h(77) : error C2065: “pn”: 未声明的标识符rnreadfile.h(77) : error C2224: “.y”的左侧必须具有结构/联合类型rnreadfile.h(77) : error C2065: “pn”: 未声明的标识符rnreadfile.h(77) : error C2224: “.y”的左侧必须具有结构/联合类型rnreadfile.h(77) : error C2065: “pn”: 未声明的标识符rnreadfile.h(77) : error C2224: “.z”的左侧必须具有结构/联合类型rnreadfile.h(77) : error C2065: “pn”: 未声明的标识符rnreadfile.h(77) : error C2224: “.z”的左侧必须具有结构/联合类型rnreadfile.h(77) : error C2198: “sqrt”: 用于调用的参数太少rnreadfile.h(78) : error C2065: “ixVertice”: 未声明的标识符rnreadfile.h(78) : error C2065: “pn”: 未声明的标识符rnreadfile.h(78) : error C2224: “.x”的左侧必须具有结构/联合类型rnreadfile.h(78) : error C2065: “len”: 未声明的标识符rnreadfile.h(79) : error C2065: “ixVertice”: 未声明的标识符rnreadfile.h(79) : error C2065: “pn”: 未声明的标识符rnreadfile.h(79) : error C2224: “.y”的左侧必须具有结构/联合类型rnreadfile.h(79) : error C2065: “len”: 未声明的标识符rnreadfile.h(80) : error C2065: “ixVertice”: 未声明的标识符rnreadfile.h(80) : fatal error C1003: 错误计数超过 100;正在停止编译rnrn[/code]
相关热词 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法

相似问题

2
平方求和的计算公式怎么利用C语言编写实现的?请问思路办法
0
区间数组连续最大序列问题怎么利用C语言的办法编写代码来实现的??
0
如何利用C语言编程实现对数列的搜索问题,采用C语言代码的编写的方式是怎么做?
0
最大优雅的子序列的和的数据结构的设计,怎么采用C语言的程序编写思想的解决的过程?
0
累计求和之后的排序的算法的问题,如何利用C语言的程序的编写的思想来实现的
0
单调增长的子序列的一个算法题,要求利用C语言的程序编写的思想来实现怎么做
0
多行计算包含的最大求和?如何利用C语言的程序的编写的办法?
0
C语言解决字符的序列的输出的问题,具体的程序的编写的实现的做法怎么实现?
0
计算最大的子序列的和是多少,怎么利用C语言的程序的编写的思路的实现?
0
数列的方阵找位置的问题,利用C语言程序过程的编写的思路怎么才能实现的?
0
先取模再求和的一个算法的计算问题,怎么利用C程序的语言代码编写的方式实现呢?
0
代数数列的求和问题计算的运用,怎么采用C程序的编程思想的代码具体编写的过程步骤?
0
多次的计算的子序列算法问题,怎么采用的C语言程序编写的办法实现的?
0
数列求和循环的运算的优化,怎么采用C程序的代码编写程序的形式来解答这个问题
0
数列的运用,取石子的一个胜负问题,如何利用 C 语言程序编写的技术的原理怎么实现的?
0
C语言程序计算最大可以获取的积分的问题,怎么编写程序的代码的方式具体的实现的?
0
递归函数编写计算求和的问题,怎么采用C语言的程序代码编写的过程去实现的呢?
0
求和的逆向分解算法的实现,怎么利用C程序的语言编写的代码的过程去解决的?
0
最长有序的子序列配对问题,怎么运用C语言的程序的代码编写的过程去实现的呢?
0
三次方的求和运算的算法的问题,运用C语言的程序的编写的技术的过程怎么实现呢