2014-05-22 20 views
-1

編寫一個讀取最大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(); 
} 
+1

對於初學者,您是否知道如何總結數組的所有9個數字,而不用擔心子序列? – hugomg

+0

是的,我知道如何總結陣列中的所有9個數字 – shravani

回答

-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(); 
} 
1

首先,關於這一點:

sum[9]={0}; 

因爲問題只要求你打印各種子序列的總和,並不是完全必要的,所以我只是宣佈一個可用於求和的int。順便說一句,如果你確實需要存儲所有的和,你需要一個更大的數組:一個具有每個不同子序列的位置,而不是原始序列的每個成員。

在計算上。在這裏你會枚舉子成員:

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

什麼你想要做的是:

  1. 循環之前,總和變量初始化爲零,因爲你即將開始一個新的計算。
  2. 在循環中,將每個a[k]值添加到總和中。
  3. 循環後,由於您剛剛處理了整個子序列,因此您的求和變量將包含正確的值,因此您可以將其打印出來。

這應該給你足夠的完成練習,但是如果你有任何進一步的具體問題,請讓我知道。

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?我根據我的理解做出的程序這個鏈接。所以根據你的問題應該找到每個可能的集合的總和(以連續遞增的順序)。我已經實現了它。