程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 和為S的連續正數序列

和為S的連續正數序列

編輯:C++入門知識

小明很喜歡數學,有一天他在做數學作業時,要求計算出9~16的和,他馬上就寫出了正確答案是100。但是他並不滿足於此,他在想究竟有多少種連續的正數序列的和為100(至少包括兩個數)。沒多久,他就得到另一組連續正數和為100的序列:18,19,20,21,22。現在把問題交給你,你能不能也很快的找出所有和為S的連續正數序列? Good Luck! 輸入: 輸入有多組數據。 每組數據僅包括1個整數S(S<=1,000,000)。如果S為負數時,則結束輸入。 輸出: 對應每組數據,若不存在和為S的連續正數序列,則輸出“Pity!”;否則,按照開始數字從小到大的順序,輸出所有和為S的連續正數序列。每組數據末尾以“#”號結束。 樣例輸入: 4 5 100 -1 樣例輸出: Pity! # 2 3 # 9 10 11 12 13 14 15 16 18 19 20 21 22 # 思想:兩個指針一起從前往後掃描!若大於S,則下邊界++,若小於S,則上邊界++( 邊界的意思是數列的上下界哦!不要弄錯~ ),相等則輸出一對,然後繼續!S/2,因為後面在掃描,兩個數相加就一定大於S了!( 一組序列至少兩個數哦~呵呵 ) 代碼AC: [cpp]   #include <stdio.h>      int main()   {       long int s, low, high, half, sum, i;       int flag;              while( scanf("%ld", &s) != EOF )       {              if( s < 0 )              {                  break;              }                            if( s < 3 )              {                  printf("Pity!\n");                  printf("#\n");                  continue;              }                            low = 1;              high = 2;              sum = 3;              half = s / 2;              flag = 0;                            while( low <= half )              {                     if( sum > s )                     {                         sum -= low;                         low++;                     }                     else if( sum < s )                     {                          high++;                          sum += high;                     }                     else                     {                         flag = 1;                         for( i = low; i < high; i++ )                         {                              printf("%d ", i);                         }                         printf("%d\n", high);                                                  sum -= low;                         low++;                     }              }                            if( !flag )              {                  printf("Pity!\n");              }              printf("#\n");       }              return 0;   }    

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved