日本好好热aⅴ|国产99视频精品免费观看|日本成人aV在线|久热香蕉国产在线

  • <cite id="ikgdy"><table id="ikgdy"></table></cite>
    1. 西西軟件園多重安全檢測(cè)下載網(wǎng)站、值得信賴的軟件下載站!
      軟件
      軟件
      文章
      搜索

      首頁(yè)編程開發(fā)C#.NET → 一道百度之星編程大賽算法題的隨筆聯(lián)想

      一道百度之星編程大賽算法題的隨筆聯(lián)想

      相關(guān)軟件相關(guān)文章發(fā)表評(píng)論 來(lái)源:laozhu1124時(shí)間:2012/12/2 18:19:40字體大。A-A+

      作者:laozhu1124點(diǎn)擊:30次評(píng)論:0次標(biāo)簽: 編程

      編程工具(ATOM)v1.41.0免費(fèi)版
      • 類型:編程工具大。180.9M語(yǔ)言:中文 評(píng)分:10.0
      • 標(biāo)簽:
      立即下載

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

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

      首先,看題目是那樣的:

      請(qǐng)編寫程序,根據(jù)輸入的任何一個(gè)正整數(shù),找出符合這種要求的所有連續(xù)正整數(shù)序列。

      輸入數(shù)據(jù):一個(gè)正整數(shù),以命令行參數(shù)的形式提供給程序。

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

      例如,對(duì)于15,其輸d出結(jié)果是:
      1 2 3 4 5
      4 5 6
      7 8

      對(duì)于16,其輸出結(jié)果是:
      NONE

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

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

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

      相應(yīng)的源代碼如下:

      1        Console.WriteLine("請(qǐng)你輸入一個(gè)數(shù)字");
      2             int mI = int.Parse(Console.ReadLine());
      3             int temp = mI;
      4            //是否能夠拆成n個(gè)連續(xù)的數(shù)字的表計(jì)量
      5             bool find = false;
      6             int temp1 = 0;
      7             //記錄最終的結(jié)果
      8             List<string> strs = new List<string>();                                          
      9                //憑借成最終的字符串
      10              string tempstr = string.Empty;
      11              //進(jìn)行循環(huán)拆解
      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                    //等于了有進(jìn)一步做數(shù)據(jù)重置的操作
      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                 //進(jìn)行了循環(huán)遍歷打印最終的結(jié)果
      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();

      這種循環(huán)的算法固然很好,但是出現(xiàn)漏值的情況。譬如說

      15=1+2+3+4+5

       15=4+5+6

        15=&+7

      這里遺漏了15=1+2+3+4+5,我這個(gè)算法這么做固然很好啊,因?yàn)樗臅r(shí)間復(fù)雜度是O(n).但,我要明白這么一點(diǎn)的話他是以此循環(huán),同樣的數(shù)字不可能遍歷2次。因此解決這個(gè)方案。必須需要兩層循環(huán)。因此,必須進(jìn)行方法的重構(gòu)。偽代碼如下:

      相應(yīng)源代碼如下:

      1 Console.WriteLine("請(qǐng)你輸入一個(gè)數(shù)字");
      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  清空循環(huán)
      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();

      運(yùn)行效果如下所示:

      這道題有效的考察了循環(huán)的知識(shí)及簡(jiǎn)單算法的題目,對(duì)初學(xué)者學(xué)習(xí)算法很有好處。

        相關(guān)評(píng)論

        閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

        • 8 喜歡喜歡
        • 3 頂
        • 1 難過難過
        • 5 囧
        • 3 圍觀圍觀
        • 2 無(wú)聊無(wú)聊

        熱門評(píng)論

        最新評(píng)論

        發(fā)表評(píng)論 查看所有評(píng)論(0)

        昵稱:
        表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
        字?jǐn)?shù): 0/500 (您的評(píng)論需要經(jīng)過審核才能顯示)