`
wx13212365
  • 浏览: 18849 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
文章分类
社区版块
存档分类
最新评论

子数列最的和问题

 
阅读更多
       求解数列中最大和子数列问题
在一个数列中秋节此数列的最大子数列和,并标明字数列的起始位置,如有相等的输出第一个。
开始将这一个问题想得过于简单,不就是不断遍历,同时不断更新最大值的问题吗,于是便用到了两个for循环来解决这个问题。看代码:
#include<stdio.h>
#define maxn 100000+10
int t[maxn];
int main()
{
int n,d=1;
scanf("%d",&n);
while(n>0)
{
  int a=0,max=0,sum=0,b,c;
  scanf("%d",&a);
 
  for(int i=0;i<a;i++)
  {
    scanf("%d",&t[i]);
  }
  for(int i=0;i<a;i++)
  {
     for(int j=i;j<a;j++)
     {
       sum+=t[j];
       if(max<sum)
       { b=i+1;
         c=j+1;
         max=sum;
       } 
     } 
  
     sum=0;
  }
  printf("Case %d:\n",d);
  printf("%d %d %d\n",max,b,c); 
  d++;   
  n--;
  if(n!=0)
  printf("\n");

return 0;
}
很好地解决了这个问题,但是解决问题所耗费的时间确实不尽如人意,数列小的时候还感觉不出来,但一旦数列大了那就蛋疼了。
因此通过看书了解到了一种线性解决这个问题的方法:看代码
  #include<stdio.h>
#define maxn 100000+10
int t[maxn];
int main()
{
int n,d=1;
scanf("%d",&n);
while(n>0)
{ int a,max,sum=0,b=1,c=1,temp=1;
   scanf("%d",&a);
   for(int i=0;i<a;i++)
   {
    scanf("%d",&t[i]);
   }
   max=t[0];
   for(int i=0;i<a;i++)
   {
     sum+=t[i];
    if(sum<t[i])
    {
      temp=i+1;
      sum=t[i];
    }
    if(max<sum)
    {
      max=sum;
      c=i+1;
      b=temp;
    }
   }
  printf("Case %d:\n",d);
  printf("%d %d %d\n",max,b,c); 
  d++;   
  n--;
  if(n!=0)
  printf("\n");

return 0;
}
此方法的原理就是一旦前面的代码有小于零的和出现就将和变为零,当然为了适应具体的问题我进行了一定的改变,线性求解就很好的解决了时间问题,有兴趣可以自己试一下。
将原版的写一下:
#include<stdio.h>
#define maxn 100000+10
int t[maxn];
int main()
{
int n,d=1;
scanf("%d",&n);
while(n>0)
{ int a,max,sum=0,b=1,c=1,temp=1;
   scanf("%d",&a);
   for(int i=0;i<a;i++)
   {
    scanf("%d",&t[i]);
   }
   max=t[0];
   for(int i=0;i<a;i++)
   {
     sum+=t[i];
    if(max<sum)
    {
max=sum;
}else
If(sum<0)
{
sum=0;
}
   }
/*
  printf("Case %d:\n",d);
  printf("%d %d %d\n",max,b,c); 
  d++;   
  n--;
  if(n!=0)
  printf("\n");*/

return 0;
}


[size=large][/size]
分享到:
评论

相关推荐

    10 子数列与聚点原理

    在高等数学的学习过程中,子数列和聚点原理是非常重要的概念。它们不仅有助于理解数列的收敛性质,而且对于深入探讨实数集的拓扑结构也有着不可替代的作用。本章节将从数列的基本性质出发,详细介绍子数列的概念、...

    等差等比数列中的子数列问题.doc

    等差等比数列中的子数列问题 一、定义子数列 子数列是由数列的一些项按原来的顺序构成的一个新数列。例如,数列{a, b, c, d, e, f}的子数列可以是{a, c, e}或{b, d, f}等。 二、等差数列中的子数列 等差数列是指...

    数列极差问题

    数列极差问题是一个涉及数学和算法的挑战,主要探讨如何通过特定操作计算数列的最大值和最小值的差值,即极差M。在这个问题中,初始有n个正整数排列成一个数列,每次操作擦去其中的两个数a和b,然后将它们的乘积加1...

    数列中的奇偶项问题.pdf

    在解决数列中奇偶项问题时,需要灵活运用等差数列和等比数列的基本性质和求和公式,以及递推公式、通项公式等数学工具。在实际操作中,可能还需要结合代数变换、归纳法等解题技巧来逐步攻克难题。 在解决这些数列...

    数学之子数列问题.pdf

    在研究数学之子数列问题时,我们首先需要掌握等差数列与等比数列这两个特殊的数列。等差数列是一种线性数列,它的任意相邻两项之差是一个常数,这个常数被称为公差。等比数列则是一种类指数数列,它的任意相邻两项之...

    数据与算法——实验报告——数列递增子序列

    这篇实验报告主要探讨了在数据与算法领域中如何找到数列的最长递增子序列,这是一个常见的算法问题,尤其在计算机科学的算法设计与分析中占有重要地位。实验的目的是通过设计、实现和分析算法来锻炼解决问题的能力。...

    C语言解答经典的数学问题兔子繁衍问题即斐波那契数列问题

    斐波那契数列是一个非常著名的数学序列,它在计算机科学和数学中有着广泛的应用。这个序列由意大利数学家列奥纳多·斐波那契(Leonardo Fibonacci)提出,因此得名。斐波那契数列定义如下:序列中的第一个和第二个...

    第八次作业 k递增子数列.c

    第八次作业 k递增子数列.c

    菲波那契数列,兔子问题

    该数列最早由意大利数学家斐波那契在其著作《算盘书》中提出,用于解决一个关于兔子繁殖的问题。本文将围绕菲波那契数列的基本概念、生成算法及其应用进行详细介绍,并结合给定文件中的代码实例进行解析。 #### 二...

    android Handler子线程计算斐波那契数列

    斐波那契数列是一个经典的数学概念,其定义如下:第一项和第二项都是1,从第三项开始,每一项都等于前两项之和。用公式表示就是F(n) = F(n-1) + F(n-2),其中F(1) = 1,F(2) = 1。 在Android中,由于主线程负责处理...

    vb课设 等差等比数列求和

    【标题】"vb课设 等差等比数列求和"涉及到的是使用Visual Basic (VB)编程语言实现一个课程设计项目,该项目的核心功能是计算等差数列和等比数列的和。在VB中,我们可以创建图形用户界面(GUI)应用程序,通过用户...

    (新课标)2020年高考数学 题型全归纳 斐波那契数列.doc

    这个数列的特点是每一项都等于前两项之和,起始的两项为1。具体地,斐波那契数列可以用递归公式表示:F0 = 1, F1 = 1, Fn = Fn-1 + Fn-2 (n &gt; 1)。通过这个定义,我们可以计算出一系列的斐波那契数:1, 1, 2, 3, 5, ...

    算法-数列分段(信息学奥赛一本通-T1428).rar

    3. **区间查询**:给定一个数列和一系列区间查询,需要找出每个区间内的最大值、最小值或其他统计特性。可以采用前缀和、树状数组或线段树等数据结构优化查询效率。 4. **划分问题**:将数列划分为两个或多个部分,...

    2.3-等差数列前项n和的性质及推导--2.3(第二课时).pdf

    在解题过程中,熟练掌握等差数列前n项和的计算公式及其性质,能够帮助学生在解决实际问题时,如数列求和问题、数列应用问题等,迅速找到解题思路和计算方法。此外,等差数列的性质在概率统计、几何以及物理等领域也...

    java实现Fibonacci数列

    这种方法直观但效率较低,尤其是当计算较大的`n`时,会重复计算很多子问题。 ```java public class Fibonacci { public int fib(int n) { if (n ) return 1; return fib(n - 1) + fib(n - 2); } } ``` 这段...

    等比数列的内容

    5. 实际应用:等比数列在现实生活中有广泛的应用,例如在金融领域,复利计算、储蓄和分期付款等问题都涉及等比数列;在产品设计中,如电子产品的规格设定也可能用到等比数列的概念。 6. 教学方法:在教授等比数列时...

    K阶斐波那契数列

    递归虽然直观,但效率低下,因为它会重复计算许多相同的子问题。动态规划是一种更优的解决方案,它可以避免重复计算,通过保存之前计算的结果来提高效率。 例如,我们可以创建一个大小为K的数组dp,其中dp[i]表示第...

    算法-数列分段II(信息学奥赛一本通-T1436).rar

    这在解决某些特定问题时非常有用,例如寻找子序列的最大和、最小值、最频繁出现的元素,或者是满足特定条件的子序列。分段可以基于不同的标准,如长度、值的范围、递增或递减性质等。 在《算法-数列分段II(信息学...

    动态规划算法入门指南:从斐波那契数列到爬楼梯问题

    接下来,我们将通过两个具体的例子来深入了解动态规划算法的应用:斐波那契数列和爬楼梯问题。 ##### 3.1 斐波那契数列 斐波那契数列是一个经典的动态规划问题,数列定义如下: - F(0) = 0 - F(1) = 1 - F(n) = F...

    linux多线程程序实验,用不同线程完成一个矩阵乘法,以及子进程计算斐波那契数列,父进程输出结果

    斐波那契数列是一个典型的递归计算问题,其特点是每个数都是前两个数的和。在单线程中,递归计算斐波那契数列会导致大量的重复计算,效率较低。通过多线程,我们可以让每个线程计算一部分斐波那契数,然后将结果汇总...

Global site tag (gtag.js) - Google Analytics