2016-12-24 11 views
-1

豐富數字是一個自然數,其正確的除數之和大於數字本身。我必須用C語言編寫一個程序,它需要2個自然數k和m,假設k < = m並且將輸出(開始)第一項和最長連續豐富序列的長度(項數) k和m之間的數字,包括這兩個數字。 如果存在多個相同長度的這種序列,則它必須輸出最小的開始。如果這樣的序列不存在,那麼它必須輸出方便的消息。用C語言編寫程序,輸出第一項和給定數字之間的大量數字序列的數量

對不起,我希望一切都很清楚。所以我需要幫助粗體部分。這是我迄今爲止所做的:

int main(void) { 

    int k,m,i,j,counter=0,sum; 
    scanf("%d", &k); 
    scanf("%d", &m); 

    for(i=k; i<=m; i++) { 
     sum=0; 
     for(j=1; j<i; j++) { 
      if(i%j==0) sum=sum+j; 
     } 
     if(i<sum) { 
       counter++; 
       printf("%d\n", i); 

     } 
    } 

    if(counter==0) printf("There aren't any abundant numbers!"); 
    else printf("%d", counter); 
    return 0; 
} 

當我只需要第一項時,它輸出k和m之間的所有豐富數字。至於這個:如果存在多個相同長度的這樣的序列,那麼它必須輸出最小的開始,我甚至不明白它們是什麼意思。 k和m之間如何存在多於一個這樣的序列?

+0

請出示的樣品輸入其預期輸出! –

回答

2

我認爲這個任務可以這樣解釋。考慮一個數字N.

N not abundant 
N+1 abundant 
N+2 abundant 
N+3 abundant 
N+4 not abundant 

所以這裏你有一個3個豐富的數字序列,所以你必須輸出3的長度和N + 1的數字。

所以你需要跟蹤序列長度和序列的起始數字。

int current_sequence_length = 0; // Increment when you find an abundant number 
           // Set to zero when you find a not abundant number 

int current_sequence_start = 0; // Set to the number that starts a new sequence 

然後,你需要跟蹤最長序列的,所以你需要:

int longest_sequence_length = 0; 

int longest_sequence_start = 0; 

每當一個序列結束,你必須做到:

if (current_sequence_length > longest_sequence_length) 
{ 
    longest_sequence_length = current_sequence_length; 
    longest_sequence_start = current_sequence_start; 
} 
相關問題