• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 6, 文章 - 0, 評論 - 24, 引用 - 0
            數據加載中……

            從一道簡單題談程序設計的思維(續)

            從一道簡單題談程序設計的思維

            題目

             Stick
            Problem 

            Anthony has collected a large amount of sticks for manufacturing chopsticks. In order to simplify his job, he wants to fetch two equal-length sticks for machining at a time. After checking it over, Anthony finds that it is always possible that only one stick is left at last, because of the odd number of sticks and some other unknown reasons. For example, Anthony may have three sticks with length 1, 2, and 1 respectively. He fetches the first and the third for machinning, and leaves the second one at last. Your task is to report the length of the last stick.

            Input

            The input file will consist of several cases.
            Each case will be presented by an integer n (1 <= n <= 100, and n is odd) at first. Following that, n positive integers will be given, one in a line. These numbers indicate the length of the sticks collected by Anthony.
            The input is ended by n = 0.

            Output

            For each case, output an integer in a line, which is the length of the last stick.

            Sample Input
            3
            1
            2
            1
            0
            Sample Output
            2


            題目分析
               題意是對于給定的n(n為奇數)根木棒,其中有n - 1根是可以按長度配對的,找出按長度配對后剩余的一根木棒。
               下面給出這題的幾種解法:
               (1)對于每根木棒,都搜索與其匹配的另一根木棒,時間復雜度為O(n2);
               (2)先將木棒按其長度排序,然后依次掃描各相鄰木棒是否匹配,時間復雜度為O(nlogn);
               (3)對于任意的x,都滿足如下公式:x Xor 0 = x, x Xor x = 0。而且異或操作是滿足交換律和結合律的,因此所有配對的木棒異或后結果為0,因此將所有木棒的長度異或后得到的結果即為不成對的那根木棒的長度,時間復雜度為O(n)。

            思考題

               (1)有長度為1到n共n根木棒,現從中拿走某一根,再放入一根任意長度的木棒。順次輸入這n根木棒的長度,求拿走與放入木棒的長度分別是多少?
               (2)有n根木棒,其中有多于一半的木棒其長度相等,順次輸入所有木棒的長度,求出這些長度相等的木棒的長度是多少?

            參考資料

            郭嵩山、張子臻、王磊、湯振東著  國際大學生程序設計競賽例題解(五)  電子工業出版社

            posted on 2009-03-29 23:38 yuyang7 閱讀(2401) 評論(9)  編輯 收藏 引用 所屬分類: 程序設計競賽

            評論

            # re: 從一道簡單題談程序設計的思維(續)  回復  更多評論   

            支持,希望LZ以后多出點算法類型的文章。。。
            2009-03-30 12:32 | funcoding

            # re: 從一道簡單題談程序設計的思維(續)  回復  更多評論   

            @funcoding
            謝謝支持。
            我可能會比較多的寫一些介紹數據結構或算法的文章,關于解題的不會太多。

            2009-03-30 12:48 | yuyang7

            # re: 從一道簡單題談程序設計的思維(續)  回復  更多評論   

            int main()
            {
            int n;
            cin >> n;
            set<int> data;
            for (int i = 0; i < n; i++)
            {
            int tmp;
            cin >> tmp;
            if (data.find(tmp) != data.end())
            {
            data.erase(tmp);
            }
            else
            data.insert(tmp);
            }
            copy(data.begin(), data.end(), ostream_iterator<int>(cout," "));
            return 1;
            }
            2009-03-30 23:14 | 黃宇

            # re: 從一道簡單題談程序設計的思維(續)  回復  更多評論   

            這種是o(n)的
            =====================================
            static bool data[101] = {0};

            int main()
            {
            int n;
            cin >> n;
            for (int i = 0; i < n; i++)
            {
            int tmp;
            cin >> tmp;
            if (data[tmp])
            {
            data[tmp] = 0;
            }
            else
            data[tmp] = 1;
            }
            for (int i = 1; i < 100; i++)
            {
            if (data[i] == 1)
            {
            cout << i << endl;
            }
            }
            }
            2009-03-30 23:27 | 黃宇

            # re: 從一道簡單題談程序設計的思維(續)[未登錄]  回復  更多評論   

            @黃宇
            不好意思,樓上可能理解錯了題意.題目只說有n<= 100根木棒,并沒有說每根木棒的長度也在100以內.
            2009-03-31 11:20 | yuyang7

            # re: 從一道簡單題談程序設計的思維(續)  回復  更多評論   

            異或...

            題目還可以再變一下:
            有n種長度的棍子
            其中n-1種長度的有3根,剩下1種長度的只有2根.求那個長度...:)

            # re: 從一道簡單題談程序設計的思維(續)  回復  更多評論   

            如果題目變為樓上說的那樣的話,我只能想到排序,不知樓上有何高見。
            求解答!!!!
            2009-03-31 18:00 | yuyang7

            # re: 從一道簡單題談程序設計的思維(續)[未登錄]  回復  更多評論   

            把n個數直接異或,結果就是要求的那個剩余長度了。
            2009-04-01 11:37 | haha

            # re: 從一道簡單題談程序設計的思維(續)  回復  更多評論   

            呃..偶然路過...關于那個變種,不知LZ現在有答案了沒有.

            異或的本質是每一bit分別模2加.. 所以針對那個變種, 換成模3加即可
            狠狠色丁香婷婷久久综合| 久久精品国产精品国产精品污| 久久天天日天天操综合伊人av| 国产精品午夜久久| 一级做a爰片久久毛片毛片| 亚洲国产另类久久久精品小说| 99久久婷婷国产综合亚洲| 日韩欧美亚洲国产精品字幕久久久| 久久中文字幕人妻丝袜| 伊人久久大香线焦综合四虎| 亚洲国产成人久久综合野外| 精品久久久久久无码专区不卡| 狠狠人妻久久久久久综合| 亚洲AV无码成人网站久久精品大| 久久精品国产一区二区三区不卡| 精品久久久久久无码专区 | 久久97久久97精品免视看秋霞| 久久精品久久久久观看99水蜜桃| 日韩精品久久久久久| 无码国内精品久久人妻蜜桃| 久久久久国产一区二区| 久久福利青草精品资源站| 久久久久久久人妻无码中文字幕爆| 久久久久亚洲精品无码网址| 青青青国产精品国产精品久久久久| 欧洲成人午夜精品无码区久久 | 久久免费看黄a级毛片| 久久精品无码一区二区三区日韩 | 久久艹国产| 久久综合狠狠综合久久激情 | 四虎国产永久免费久久| 五月丁香综合激情六月久久| 久久亚洲国产最新网站| 少妇久久久久久被弄到高潮 | 亚洲一级Av无码毛片久久精品| 久久久久久国产精品无码下载| 国产激情久久久久影院| 国产精品伦理久久久久久| 品成人欧美大片久久国产欧美| 国产亚洲精午夜久久久久久| 精品久久久久中文字幕一区|