百度之星,是全球最大的中文搜索引擎,百度公司面向中国高校学生和编程爱好者所举办的高水平的程序设计大赛。他所考试的题目,全部都是算法的题目。
鄙人虽然是一个.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,第二种的方法进行了累加的算法,看其是否相等。并且这有两个指针的变量的相互的扫描。
总而言之,这两种算法,各有千秋吧。