1. 程式人生 > >找出數字n的所有連續正整數列(即連續正整數列的和為n)從m開始

找出數字n的所有連續正整數列(即連續正整數列的和為n)從m開始

//找出數字n的所有連續正整數列(即連續正整數列的和為n)從m開始 (C#)

例如:18的正整數列為: 5 6 7 因為 18 = 5+6+7;也可以 18 = 3+4+5+6;

程式碼如下:
        static void Main(string[] args)
        {
            findSequence(3, 33);
            Console.ReadKey();
        }

        static void findSequence(int m, int n){
            int count = 0;  //用一個變數來累加,和為count
            int start = m;  //start 表示起始數列的位置數
            while (true)  //因為可能存在多個數列,所以這裡先寫一個死迴圈,下面再加限制條件
            {
                for (int i = start; i < n; i++)  //先遍歷從start開始的位置數
                {
                    count += i;
                    if (count > n) {  //當某一次count大於n的時候,說明本次迴圈不成立,退出當前迴圈
                        count = 0;
                        start += 1;
                        break;
                    }
                    if (count == n)   //如果累計的和等於n,說明找到了連續整數列,將count重置為0,進入下一次迴圈前將start++
                    {
                        count = 0;
                        for (int j = start; j <= i; j++ ) {
                            Console.Write(j + " ");
                        }
                        Console.WriteLine();
                        start += 1;
                        break;
                    }
                }
                if (start == n / 2) break;
            }
        }