波多野结衣 蜜桃视频,国产在线精品露脸ponn,a v麻豆成人,AV在线免费小电影

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

百度之星,是全球最大的中文搜索引擎,百度公司面向中國高校學生和編程愛好者所舉辦的高水平的程序設計大賽。他所考試的題目,全部都是算法的題目。

鄙人雖然是一個.net程序員,在工作之余,喜愛算法。 我覺得這個題目有點意思,故而分享給大家,我想到兩種方法,提供大家,希望對大家起了一個開闊思路的作用。

首先,看題目是那樣的:

請編寫程序,根據輸入的任何一個正整數,找出符合這種要求的所有連續正整數序列。

輸入數據:一個正整數,以命令行參數的形式提供給程序。

輸出數據:在標準輸出上打印出符合題目描述的全部正整數序列,每行一個序列,每個序列都從該序列的最小正整數開始、以從小到大的順序打印。如果結果有多個序列,按各序列的最小正整數的大小從小到大打印各序列。此外,序列不允許重復,序列內的整數用一個空格分隔。如果沒有符合要求的序列,輸出“NONE”。

例如,對于15,其輸d出結果是:
1 2 3 4 5
4 5 6
7 8

對于16,其輸出結果是:
NONE

我這里提供2種算法的解法,起一個拋磚引玉的作用

方法一:可以從后往前的計算,由大到小的計算。這種計算模式有幾個思考的步驟。

①由于使 計算嗎,我可以考慮從輸入的數字的一半(奇數使其中間數)開始遍歷。于是我就有這樣一種算法。相應偽代碼如圖所示:

相應的源代碼如下:

1        Console.WriteLine("請你輸入一個數字");
2             int mI = int.Parse(Console.ReadLine());
3             int temp = mI;
4            //是否能夠拆成n個連續的數字的表計量
5             bool find = false;
6             int temp1 = 0;
7             //記錄最終的結果
8             List<string> strs = new List<string>();                                          
9                //憑借成最終的字符串
10              string tempstr = string.Empty;
11              //進行循環拆解
12             for (int i = (mI - 1) / 2 + 1; i >= 1; i--)
13             {
14                 //這一元素做差了
15                 temp = temp - i;   
16                 temp1 = temp;
17                 tempstr = tempstr + i.ToString()+",";
18                    //等于了有進一步做數據重置的操作
19                   if (temp == 0)
20             {
21                 tempstr = tempstr.Remove(tempstr.Length - 1);
22                 strs.Add(tempstr);
23                 find = true;
24                 tempstr = string.Empty;
25                 temp = mI;
26                 break;
27             }
28       
29              }
30             //沒找到可能就是空啊
31             if (!find)
32             {
33                 Console.WriteLine("None");
34             }
35             else
36             {
37                 //進行了循環遍歷打印最終的結果
38                 foreach (var temps in strs)
39                 {
40                     Console.Write(mI.ToString() +
41                         "=");
42                     Console.Write(temps.Replace(",", "+"));
43                     Console.WriteLine();
44                 }
45             }
46             Console.ReadKey();

這種循環的算法固然很好,但是出現漏值的情況。譬如說

15=1+2+3+4+5

 15=4+5+6

  15=&+7

這里遺漏了15=1+2+3+4+5,我這個算法這么做固然很好啊,因為他的時間復雜度是O(n).但,我要明白這么一點的話他是以此循環,同樣的數字不可能遍歷2次。因此解決這個方案。必須需要兩層循環。因此,必須進行方法的重構。偽代碼如下:

相應源代碼如下:

1 Console.WriteLine("請你輸入一個數字");
2             int mI = int.Parse(Console.ReadLine());
3             int temp = mI;
4             bool find = false;
5             int temp1 = 0;
6             List<string> strs = new List<string>();
7
8
9             string tempstr = string.Empty;
10
11             for (int i = (mI - 1) / 2 + 1; i >= 1; i--)
12             {
13                 temp = temp - i;
14                 temp1 = temp;
15                 tempstr = tempstr + i.ToString() + ",";
16
17                 for (int j = i - 1; j >= 1; j--)
18                 {
19                     temp = temp - j;
20                     tempstr = tempstr + j.ToString() + ",";
21                     //小于0
22                     if (temp == 0)
23                     {
24                         tempstr = tempstr.Remove(tempstr.Length - 1);
25                         strs.Add(tempstr);
26                         find = true;
27                         tempstr = string.Empty;
28                         temp = mI;
29                         break;
30                     }
31
32                     if (temp < 0)
33                     {
34                         tempstr = string.Empty;
35                         temp = mI;
36                         break;
37                     }
38                     //j==1  清空循環
39                     if (j == 1)
40                     {
41                         tempstr = string.Empty;
42                         temp = mI;
43                     }
44
45                 }
46
47
48
49             }
50
51             if (!find)
52             {
53                 Console.WriteLine("None");
54             }
55             else
56             {
57                 foreach (var temps in strs)
58                 {
59                     Console.Write(mI.ToString() +
60                         "=");
61                     Console.Write(temps.Replace(",", "+"));
62                     Console.WriteLine();
63                 }
64             }
65             Console.ReadKey();

運行效果如下所示:

這道題有效的考察了循環的知識及簡單算法的題目,對初學者學習算法很有好處。

分享到:
標簽:之星 算法 隨筆 聯想 大賽
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定