打印整数数组的每个连续子序列的和

时间:2014-05-22 16:52:08

标签: c

  

编写一个读取最多9个整数序列的c程序,打印出每个整数的总和   它的连续子序列。

我能够打印所有连续的子序列,但不能打印每个子序列的总和。请帮我学习。我是一个天真的学习者。请原谅我编码效率低下的原因。以下是我能够做到的。

#include<stdio.h>
int main()
{ 
    int a[9];
    int i,j,k,sum[9]={0};
    for(i=0;i<9;i++)
        scanf("%d",&a[i]);

    for(i=0;i<9;i++)
    {
        for(j=i;j<9;j++)
        {
            for(k=i;k<j+1;k++)
                printf("+%d ",a[k]);
            printf("\n");

        }

    }
    getch();
}

3 个答案:

答案 0 :(得分:1)

首先,关于这个:

sum[9]={0};

由于问题只要求您打印各个子序列的总和,因此不一定要存储它们,所以我只声明一个int可以用来进行求和。顺便说一下,如果你确实需要存储所有的总和,你需要一个更大的数组:一个具有每个不同子序列的位置,而不是原始系列的每个成员。

进行计算。这里是你枚举子序列成员的地方:

for(k=i;k<j+1;k++)
    printf("+%d ",a[k]);

您要做的是:

  1. 在循环之前,将summation变量初始化为零,因为您即将开始新的计算。
  2. 在循环内部,将每个a[k]值添加到总和中。
  3. 在循环之后,你的求和变量将包含正确的值,因为你刚刚处理了整个子序列,所以你可以简单地打印它。
  4. 这应该足以让你完成练习,但如果你有任何进一步的具体问题,请告诉我。

答案 1 :(得分:0)

#include<stdio.h>
int main()
{
    int a[9]={0};
    int sum=0;
    int i,j;
    for(i=0;i<9;i++)
        scanf("%d",&a[i]);
    for(i=0;i<9-1;i++)
    {
        sum=0;
        for(j=i;j<9;j++)
        {
            sum=sum+a[j];
            printf("sum: %d ",sum);
        }
      printf("\n\n");
   }
return 0;
}

首先关闭所有我都不知道什么是连续的子序列,很抱歉,如果我的答案对你的问题不是那么正确,我用Google搜索并发现What does this definition of contiguous subsequences mean?我根据我对这个链接的理解。所以根据你的问题应该找到每个可能的集合的总和(以连续的递增顺序)。我已经实现了它。

答案 2 :(得分:-1)

这可能会破坏你的学习过程,但无论如何这里只有一个解决方案:

#include<stdio.h>
int main()
{ 
    int a[9];
    int i;
    int cont_sum = 0;
    int prev;
    for(i=0;i<9;i++)
        scanf("%d",&a[i]);

    prev = a[0];
    cont_sum = prev;
    for(i=1;i<9;i++)
    {
        if(a[i] != prev)
        {
            printf("contiguous sub sequence sum: %d\n", cont_sum);
            prev = a[i];
            cont_sum = prev;
        }
        else
        {
            prev = a[i];
            cont_sum += prev;
        }
    }
    printf("contiguous sub sequence sum: %d\n", cont_sum);
    getch();
}