百度之星,是全球最大的中文搜索引擎,百度公司面向中國高校學生和編程愛好者所舉辦的高水平的程序設計大賽。他所考試的題目,全部都是算法的題目。
鄙人雖然是一個.net程序員,在工作之余,喜愛算法。 我覺得這個題目有點意思,故而分享給大家,我想到兩種方法,提供大家,希望對大家起了一個開闊思路的作用。
下面介紹解法二了。
解法二,是抓小放大。 由小及大。首先,說一說我分析的思路吧。
第一步,還是判斷i是不小於i/2,以此循環了。
第二步,是不是判斷此范圍的值的累加是不是等於相應某個值。
第三步,將其輸出
第四步,如果沒有就輸出none這個值。
下面我們就看相應的源代碼了
1 Console.WriteLine("請輸入一個正整數"); 2 int inputNum = Convert.ToInt32(Console.ReadLine()); 3 // 是否連續的值的標識 4 bool flag = false; 5 //相應的計數的變量 6 int i = 1, j = 2, sum = 0; 7 //從inputNum、2開始計數了 8 while (i < inputNum / 2) 9 { 10 sum = add(i, j); 11 while (sum != inputNum && i < inputNum / 2 + 1) 12 { 13 if (sum > inputNum) 14 i++; 15 else 16 j++; 17 sum = add(i, j); 18 } 19 //打印了相應的循環 20 for (int k = i; k <= j && j > i; k++) 21 { 22 23 Console.Write(k); 24 25 Console.Write(" "); 26 } 27 i++; 28 Console.WriteLine(); 29 } 30 31 if (!flag) 32 { 33 Console.WriteLine("NONE"); 34 } 35 Console.ReadKey(); 36 //計算累加的算法 37 static int add(int m, int n) 38 { 39 int sum = 0; 40 for (int i = m; i <= n; i++) 41 { 42 sum += i; 43 } 44 return sum; 45 }
這個算法的作用,就是看其通過循環來看其是否相等的方法。
他與第一種的算法,有所不同,第一種方法是從其減 ,看其能否得0,第二種的方法進行了累加的算法,看其是否相等。並且這有兩個指針的變量的相互的掃描。
總而言之,這兩種算法,各有千秋吧。