• <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>

            life02

              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              197 隨筆 :: 3 文章 :: 37 評論 :: 0 Trackbacks

            #

            題目轉自:
            http://blog.163.com/ecy_fu/blog/static/444512620098228849190/
             二筆只有三道題,分值分別為30, 30, 40,題分別如下:
            1、實現strtol函數,其原型如為int strtol(const char *num_str, char **endptr, int base),num_str存放待轉換的字符串,可以是負數也可以是正數;endptr指向第一個非法字符的地址,如果endptr為NULL則不指向第一個非法字符的地址;base用于指示進制,若base為0,則根據num_str的指示來轉換。函數必須檢查溢出,如果正數溢出,返回INT_MAX;若負數溢出,返回INT_MIN。
            2、一億個數找最大的1000個數,要求效率高占用內存少。函數原型為:find_max_data(int* source_data, int* max_data),其中source_data是存放一億個數的數組,max_data用于存放其中最大的1000個數。
            3、將一個集合拆分成兩個不相交的子集,兩個子集元素之和相等,如{1, 2, 3, 4, 5, 6, 7},拆分成:
            {2, 5, 7}, {1, 3, 4, 6}
            給出一個集合,求所有符合上面要求的拆分,效率最高分越高,函數原型為int cal_num(int n);

            第三題:
            利用回溯剪枝法
            空間復雜度:O(n) 棧的最大深度也就是n了
            時間復雜度:接近于O(2^n-1), 因為本質上程序時一個遍歷樹的過程,如果沒有剪枝,那么樹是一個滿二叉樹,結點共2^n-1個,也就要遍歷2^n-1次。雖然剪枝,但速度估計仍是 2^n次方級別的。
            試了下,調用cal_num(104),好久了結果都沒有出來。。。

            不知用上DP算法會不會好點,不過聽說回溯法怎么弄效率都跟不上,最好用遞推?
            在哪聽說的?
            http://topic.csdn.net/u/20090922/11/ebc26b48-6581-40c3-afe0-a95ca2d700d5.html

             

            /////////////////////////////////////////////////////////////////
            //file divide_set.h:

            #ifndef __DIVIDE_SET_H__
            #define __DIVIDE_SET_H__

            // 計算集合set的所有滿足下列條件的子集合:子集合元素之和等于value
            // 子集合的元素對應的label置1
            void divide_set( int set[], int label[], int len, int i_set, int value );

            // 對集合{1,2,n}劃分
            void cal_num( int n );

            #endif


            /////////////////////////////////////////////////////////////////
            //file divide_set.cpp:

            #include 
            "stdafx.h"
            #include 
            "divide_set.h"

            #include 
            <iostream>

            using namespace std;

            // 查找集合set中,滿足元素之和等于value的子集合,結果存于label里
            void divide_set( int set[], int label[], int len, int i_set, int value )
            {
             
            // 輸出結果
             if ( value == 0 )
             
            {
              cout
            <<"";
              
            for ( int i=0; i<len; ++i )
              
            {
               
            if ( label[i] )
               
            {
                cout
            <<set[i]<<" ";
               }

               
              }

              cout
            <<"";
              cout
            <<" , { ";
              
            for ( int i=0; i<len; ++i )
              
            {
               
            if ( 0 == label[i] )
               
            {
                cout
            <<set[i]<<" ";
               }

              }

              cout
            <<"";
              cout
            <<endl;
              
            return;
             }


             
            if ( i_set >= len || value <0)
             
            {
              
            return;
             }


             
            // 取第i_set個元素
             label[i_set] = 1;
             divide_set( 
            set, label, len, i_set+1, value-set[i_set] );
             
             
            // 不取第i_set個元素
             label[i_set] = 0;
             divide_set( 
            set, label, len, i_set+1, value );
            }


            void cal_num( int n )
            {
             
            int* set = new int[n];
             
            int* label = new int[n];

             
            // initialize set and label
             int sum_value = 0;
             
            for ( int i=0; i<n; ++i )
             
            {
              
            set[i] = i+1;
              sum_value 
            += set[i]; 
             }

             memset( label, 
            0, n*sizeof(int) );

             
            // 保證元素總和為偶數
             if( sum_value%2 == 0 )
              divide_set( 
            set, label, n, 0, sum_value/2 );

             delete[] 
            set;
             delete[] label;
            }


             

            本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/zdl1016/archive/2009/10/04/4632688.aspx

            posted @ 2009-10-07 11:08 life02 閱讀(525) | 評論 (1)編輯 收藏

            面試過程中,面試官會向應聘者發問,而應聘者的回答將成為面試官考慮是否接受他的重要依據。對應聘者而言,了解這些問題背后的“貓膩”至關重要。本文對面試中經常出現的一些典型問題進行了整理,并給出相應的回答思路和參考答案。讀者無需過分關注分析的細節,關鍵是要從這些分析中“悟”出面試的規律及回答問題的思維方式,達到“活學活用”。
             
              問題一:“請你自我介紹一下”
             
              思路: 1、這是面試的必考題目。 2、介紹內容要與個人簡歷相一致。 3、表述方式上盡量口語化。 4、要切中要害,不談無關、無用的內容。 5、條理要清晰,層次要分明。6、事先最好以文字的形式寫好背熟。
             
              問題二:“談談你的家庭情況”
             
              思路:1、 況對于了解應聘者的性格、觀念、心態等有一定的作用,這是招聘單位問該問題的主要原因。 2、 簡單地羅列家庭人口。 3、 宜強調溫馨和睦的家庭氛圍。 4、 宜強調父母對自己教育的重視。 5、 宜強調各位家庭成員的良好狀況。 6、 宜強調家庭成員對自己工作的支持。 7、 宜強調自己對家庭的責任感。
             
                問題三:“你有什么業余愛好?”
             
              思路: 1、 業余愛好能在一定程度上反映應聘者的性格、觀念、心態,這是招聘單位問該問題的主要原因。 2、 最好不要說自己沒有業余愛好。 3、 不要說自己有那些庸俗的、令人感覺不好的愛好。 4、 最好不要說自己僅限于讀書、聽音樂、上網,否則可能令面試官懷疑應聘者性格孤僻。 5、 最好能有一些戶外的業余愛好來“點綴”你的形象。
             
              問題四:“你最崇拜誰?”
             
              思路: 1、 最崇拜的人能在一定 程度上反映應聘者的性格、觀念、心態,這是面試官問該問題的主要原因。 2、 不宜說自己誰都不崇拜。 3、 不宜說崇拜自己。 4、 不宜說崇拜一個虛幻的、或是不知名的人。 5、 不宜說崇拜一個明顯具有負面形象的人。 6、 所崇拜的人人最好與自己所應聘的工作能“搭”上關系。 7、 最好說出自己所崇拜的人的哪些品質、哪些思想感染著自己、鼓舞著自己。
             
              問題五:“你的座右銘是什么?”
             
              思路: 1、座右銘能在一定程度上反映應聘者的性格、觀念、心態,這是面試官問這個問題的主要原因。 2、不宜說那些醫引起不好聯想的座右銘。 3、不宜說那些太抽象的座右銘。 4、不宜說太長的座右銘。 5、座右銘最好能反映出自己某種優秀品質。 6、 參考答案——“只為成功找方法,不為失敗找借口”。
             
              問題六:“談談你的缺點”
             
              思路: 1、 不宜說自己沒缺點。 2、 不宜把那些明顯的優點說成缺點。 3、 不宜說出嚴重影響所應聘工作的缺點。 4、 不宜說出令人不放心、不舒服的缺點。 5、 可以說出一些對于所應聘工作“無關緊要”的缺點,甚至是一些表面上看是缺點,從工作的角度看卻是優點的缺點。
             
              問題七:“談一談你的一次失敗經歷”
             
              思路: 1、 不宜說自己沒有失敗的經歷。 2、 不宜把那些明顯的成功說成是失敗。 3、 不宜說出嚴重影響所應聘工作的失敗經歷, 4、 所談經歷的結果應是失敗的。 5、 宜說明失敗之前自己曾信心白倍、盡心盡力。 6、 說明僅僅是由于外在客觀原因導致失敗。 7、 失敗后自己很快振作起來,以更加飽滿的熱情面對以后的工作。

              問題八:“你為什么選擇我們公司?”
             
              思路: 1、 面試官試圖從中了解你求職的動機、愿望以及對此項工作的態度。 2、 建議從行業、企業和崗位這三個角度來回答。 3、 參考答案——“我十分看好貴公司所在的行業,我認為貴公司十分重視人才,而且這項工作很適合我,相信自己一定能做好。”

              問題九:“對這項工作,你有哪些可預見的困難?”
             
              思路: 1、 不宜直接說出具體的困難,否則可能令對方懷疑應聘者不行。 2、 可以嘗試迂回戰術,說出應聘者對困難所持有的態度——“工作中出現一些困難是正常的,也是難免的,但是只要有堅忍不拔的毅力、良好的合作精神以及事前周密而充分的準備,任何困難都是可以克服的。”

              問題十:“如果我錄用你,你將怎樣開展工作”
             
              思路: 1、 如果應聘者對于應聘的職位缺乏足夠的了解,最好不要直接說出自己開展工作的具體辦法, 2、 可以嘗試采用迂回戰術來回答,如“首先聽取領導的指示和要求,然后就有關情況進行了解和熟悉,接下來制定一份近期的工作計劃并報領導批準,最后根據計劃開展工作。”
             
              問題十一:“與上級意見不一是,你將怎么辦?”
             
              思路: 1、 一般可以這樣回答“我會給上級以必要的解釋和提醒,在這種情況下,我會服從上級的意見。” 2、 如果面試你的是總經理,而你所應聘的職位另有一位經理,且這位經理當時不在場,可以這樣回答:“對于非原則性問題,我會服從上級的意見,對于涉及公司利益的重大問題,我希望能向更高層領導反映。”
             
              問題十二:“我們為什么要錄用你?”
             
              思路: 1、 應聘者最好站在招聘單位的角度來回答。 2、 招聘單位一般會錄用這樣的應聘者:基本符合條件、對這份共組感興趣、有足夠的信心。 3、 如“我符合貴公司的招聘條件,憑我目前掌握的技能、高度的責任感和良好的餓適應能力及學習能力 ,完全能勝任這份工作。我十分希望能為貴 公司服務,如果貴公司給我這個機會,我一定能成為貴公司的棟梁!”

              問題十三:“你能為我們做什么?”
             
              思路: 1、 基本原則上“投其所好”。 2、 回答這個問題前應聘者最好能“先發制人”,了解招聘單位期待這個職位所能發揮的作用。 3、 應聘者可以根據自己的了解,結合自己在專業領域的優勢來回答這個問題。
             
              問題十四:“你是應屆畢業生,缺乏經驗,如何能勝任這項工作?”
             
              思路: 1、 如果招聘單位對應屆畢業生的應聘者提出這個問題,說明招聘單位并不真正在乎“經驗”,關鍵看應聘者怎樣回答。 2、 對這個問題的回答最好要體現出應聘者的誠懇、機智、果敢及敬業。 3、 如“作為應屆畢業生,在工作經驗方面的確會有所欠缺,因此在讀書期間我一直利用各種機會在這個行業里做兼職。我也發現,實際工作遠比書本知識豐富、復雜。但我有較強的責任心、適應能力和學習能力,而且比較勤奮,所以在兼職中均能圓滿完成各項工作,從中獲取的經驗也令我受益非淺。請貴公司放心,學校所學及兼職的工作經驗使我一定能勝任這個職位。”

              問題十五:“你希望與什么樣的上級共事?”
             
              思路: 1、 通過應聘者對上級的“希望”可以判斷出應聘者對自我要求的意識,這既上一個陷阱,又上一次機會。 2、 最好回避對上級具體的希望,多談對自己的要求。 3、 如“做為剛步入社會新人,我應該多要求自己盡快熟悉環境、適應環境,而不應該對環境提出什么要求,只要能發揮我的專長就可以了。”
             
              問題十六:“您在前一家公司的離職原因是什么?”
             
              思路: 1、 最重要的是:應聘者要使找招聘單位相信,應聘者在過往的單位的“離職原因”在此家招聘單位里不存在。 2、 避免把“離職原因”說得太詳細、太具體。 3、 不能摻雜主觀的負面感受,如“太幸苦”、“人際關系復雜”、“管理太混亂”、“公司不重視人才”、“公司排斥我們某某的員工”等。 4、 但也不能躲閃、回避,如“想換換環境”、“個人原因”等。 5、 不能涉及自己負面的人格特征,如不誠實、懶惰、缺乏責任感、不隨和等。 6、 盡量使解釋的理由為應聘者個人形象添彩。 7、 如“我離職是因為這家公司倒閉。我在公司工作了三年多,有較深的感情。從去年始,由于市場形勢突變,公司的局面急轉直下。到眼下這一步我覺得很遺憾,但還要面對顯示,重新尋找能發揮我能力的舞臺。” 同一個面試問題并非只有一個答案,而同一個答案并不是在任何面試場合都有效,關鍵在于應聘者掌握了規律后,對面試的具體情況進行把握,有意識地揣摩面試官提出問題的心理背景,然后投其所好。
            posted @ 2009-10-02 16:36 life02 閱讀(177) | 評論 (0)編輯 收藏

            // 編程珠璣 第二章 字符串string循環移位i位
            // eg "abcdefgh" 循環移位 3位 =》 "defghabc"
            #include<iostream.h>
            #include 
            <string.h>

            char* string_cyclicshift_v2( char* stringint i )
            {
                
            char ch;
                
            int exchange;
                
            int len;
                
                exchange 
            = 0;
                len 
            = strlen( string );
                
                i 
            = i%len;
                
            if ( 0 == i )
                    
            return string;
                
                
            int start_pos=0;
                
            while ( exchange<len )
                
            {
                    
            char ch = string[start_pos];
                    
                    
            int currpos = start_pos;
                    
            int nextpos = (len+currpos+i)%len;
                    
            while ( nextpos != start_pos )
                    
            {
                        
            string[currpos] = string[nextpos];
                        
            ++exchange;
                        
                        currpos 
            = nextpos;
                        nextpos 
            = (len+currpos+i)%len;

                    }

                     cout
            <<string<<endl;
                    
            string[currpos] = ch;
                    
            ++exchange;
                    
                    
            ++start_pos;
                }

                
                
            return string;
            }


            int main(){
                
            char string[7]={'a','b','h','d','h','s'};
                cout
            <<string<<endl;
                
            char* s;
                s
            =string_cyclicshift_v2(string,4);
                cout
            <<s<<endl;

            return 0;
            }

            要求時間復雜度空間復雜度都盡可能的低。

            時間復雜度 O(n), 空間復雜度O(1),常量時間。

            http://blog.csdn.net/zdl1016/archive/2009/09/21/4575309.aspx
            posted @ 2009-09-28 23:02 life02 閱讀(1206) | 評論 (1)編輯 收藏

            #include<iostream.h>
            #define N 13

            void sift(int* a,int low,int high){
                
            int i=low;
                
            int j=2*i;
                
            int temp=a[i];
                
            while(j<=high){
                      
            if (j<high && a[j]<a[j+1])
                      
            {
                          j
            ++;
                      }

                      
            if (temp<a[j])
                      
            {
                          a[i]
            =a[j];
                          i
            =j;
                          j
            =2*i;
                      }
            else
                          
            break;

                }

                a[i]
            =temp;
            }


            void heap_sort(int* a,int n){
               
            int i;
               
            int temp;
               
            for (i=n/2;i>=0;i--)
               
            {
                   sift(a,i,n
            -1);
               }

               
            for (i=n-1;i>0;i--)
               
            {
                   temp
            =a[0];
                   a[
            0]=a[i];
                   a[i]
            =temp;
                   sift(a,
            0,i-1);
               }


            }


            void sort_print(int* a,int n){
              
            for (int i=0;i<n;i++)
              
            {
                  cout
            <<a[i]<<" ";
              }

              cout
            <<endl;

            }


            int main(){

                
            int a[N]={34,34,566,66,77,8,989,6676,12323,89,90,123,4355};
                sort_print(a,N);
                heap_sort(a,N);
                sort_print(a,N);



            }
            posted @ 2009-09-28 22:28 life02 閱讀(235) | 評論 (0)編輯 收藏

            http://blog.163.com/pcteacher/blog/static/66585815200862183835111/


            算法的力量(轉李開復)---適合計算機專業新生

            算法的力量
            2006年5月

            算法是計算機科學領域最重要的基石之一,但卻受到了國內一些程序員的冷落許多學生看到一些公司在招聘時要求的編程語言五花八門,就產生了一種誤解,認為學計算機就是學各種編程語言,或者認為,學習最新的語言技術標準就是最好的鋪路方法其實,大家被這些公司誤導了編程語言雖然該學,但是學習計算機算法和理論更重要,因為計算機語言和開發平臺日新月異,但萬變不離其宗的是那些算法和理論,例如數據結構算法編譯原理計算機體系結構關系型數據庫原理等等在開復學生網上,有位同學生動地把這些基礎課程比擬為內功,把新的語言技術標準比擬為外功整天趕時髦的人最后只懂得招式,沒有功力,是不可能成為高手的

            算法與我

            當我在1980年轉入計算機科學系時,還沒有多少人的專業方向是計算機科學有許多其他系的人嘲笑我們說:知道為什么只有你們系要加一個科學,而沒有物理科學系或化學科學系嗎?因為人家是真的科學,不需要畫蛇添足,而你們自己心虛,生怕不科學,才這樣欲蓋彌彰 其實,這點他們徹底弄錯了真正學懂計算機的人(不只是編程匠)都對數學有相當的造詣,既能用科學家的嚴謹思維來求證,也能用工程師的務實手段來解決問題而這種思維和手段的最佳演繹就是算法

            記得我讀博時寫的Othello對弈軟件獲得了世界冠軍當時,得第二名的人認為我是靠僥幸才打贏他,不服氣地問我的程序平均每秒能搜索多少步棋,當他發現我的軟件在搜索效率上比他快60多倍時,才徹底服輸為什么在同樣的機器上,我可以多做60倍的工作呢?這是因為我用了一個最新的算法,能夠把一個指數函數轉換成四個近似的表,只要用常數時間就可得到近似的答案在這個例子中,是否用對算法才是能否贏得世界冠軍的關鍵

            還記得1988年貝爾實驗室副總裁親自來訪問我的學校,目的就是為了想了解為什么他們的語音識別系統比我開發的慢幾十倍,而且,在擴大至大詞匯系統后,速度差異更有幾百倍之多他們雖然買了幾臺超級計算機,勉強讓系統跑了起來,但這么貴的計算資源讓他們的產品部門很反感,因為昂貴的技術是沒有應用前景的在與他們探討的過程中,我驚訝地發現一個O(n*m)的動態規劃(dynamic programming)居然被他們做成了O(n*n*m)更驚訝的是,他們還為此發表了不少文章,甚至為自己的算法起了一個很特別的名字,并將算法提名到一個科學會議里,希望能得到大獎當時,貝爾實驗室的研究員當然絕頂聰明,但他們全都是學數學物理或電機出身,從未學過計算機科學或算法,才犯了這么基本的錯誤我想那些人以后再也不會嘲笑學計算機科學的人了吧!

            網絡時代的算法

            有人也許會說:今天計算機這么快,算法還重要嗎?其實永遠不會有太快的計算機,因為我們總會想出新的應用雖然在摩爾定律的作用下,計算機的計算能力每年都在飛快增長,價格也在不斷下降可我們不要忘記,需要處理的信息量更是呈指數級的增長現在每人每天都會創造出大量數據(照片,視頻,語音,文本等等)日益先進的記錄和存儲手段使我們每個人的信息量都在爆炸式的增長互聯網的信息流量和日志容量也在飛快增長在科學研究方面,隨著研究手段的進步,數據量更是達到了前所未有的程度無論是三維圖形海量數據處理機器學習語音識別,都需要極大的計算量在網絡時代,越來越多的挑戰需要靠卓越的算法來解決

            再舉另一個網絡時代的例子在互聯網和手機搜索上,如果要找附近的咖啡店,那么搜索引擎該怎么處理這個請求呢?

            最簡單的辦法就是把整個城市的咖啡館都找出來,然后計算出它們的所在位置與你之間的距離,再進行排序,然后返回最近的結果但該如何計算距離呢?圖論里有不少算法可以解決這個問題

            這么做也許是最直觀的,但絕對不是最迅速的如果一個城市只有為數不多的咖啡館,那這么做應該沒什么問題,反正計算量不大但如果一個城市里有很多咖啡館,又有很多用戶都需要類似的搜索,那么服務器所承受的壓力就大多了在這種情況下,我們該怎樣優化算法呢?

            首先,我們可以把整個城市的咖啡館做一次預處理比如,把一個城市分成若干個格子(grid),然后根據用戶所在的位置把他放到某一個格子里,只對格子里的咖啡館進行距離排序

            問題又來了,如果格子大小一樣,那么絕大多數結果都可能出現在市中心的一個格子里,而郊區的格子里只有極少的結果在這種情況下,我們應該把市中心多分出幾個格子更進一步,格子應該是一個樹結構,最頂層是一個大格整個城市,然后逐層下降,格子越來越小,這樣有利于用戶進行精確搜索如果在最底層的格子里搜索結果不多,用戶可以逐級上升,放大搜索范圍

            上述算法對咖啡館的例子很實用,但是它具有通用性嗎?答案是否定的把咖啡館抽象一下,它是一個點,如果要搜索一個面該怎么辦呢?比如,用戶想去一個水庫玩,而一個水庫有好幾個入口,那么哪一個離用戶最近呢?這個時候,上述樹結構就要改成r-tree,因為樹中間的每一個節點都是一個范圍,一個有邊界的范圍(參考:http://www.cs.umd.edu/~hjs/rtrees/index.html

            通過這個小例子,我們看到,應用程序的要求千變萬化,很多時候需要把一個復雜的問題分解成若干簡單的小問題,然后再選用合適的算法和數據結構

            并行算法:Google的核心優勢

            上面的例子在Google里就要算是小case了!每天Google的網站要處理十億個以上的搜索,GMail要儲存幾千萬用戶的2G郵箱,Google Earth要讓數十萬用戶同時在整個地球上遨游,并將合適的圖片經過互聯網提交給每個用戶如果沒有好的算法,這些應用都無法成為現實

            在這些的應用中,哪怕是最基本的問題都會給傳統的計算帶來很大的挑戰例如,每天都有十億以上的用戶訪問Google的網站,使用Google的服務,也產生很多很多的日志(Log)因為Log每分每秒都在飛速增加,我們必須有聰明的辦法來進行處理我曾經在面試中問過關于如何對log進行一些分析處理的問題,有很多面試者的回答雖然在邏輯上正確,但在實際應用中是幾乎不可行的按照他們的算法,即便用上幾萬臺機器,我們的處理速度都跟不上數據產生的速度

            那么Google是如何解決這些問題的呢?

            首先,在網絡時代,就算有最好的算法,也要能在并行計算的環境下執行在Google的數據中心,我們使用的是超大的并行計算機但傳統的并行算法運行時,效率會在增加機器數量后迅速降低,也就是說,十臺機器如果有五倍的效果,增加到一千臺時也許就只有幾十倍的效果這種事倍功半的代價是沒有哪家公司可以負擔得起的而且,在許多并行算法中,只要一個結點犯錯誤,所有計算都會前功盡棄

            那么Google是如何開發出既有效率又能容錯的并行計算的呢?

            Google最資深的計算機科學家Jeff Dean認識到, Google 所需的絕大部分數據處理都可以歸結為一個簡單的并行算法:Map and Reduce(http://labs.google.com/papers/mapreduce.html) 這個算法能夠在很多種計算中達到相當高的效率,而且是可擴展的(也就是說,一千臺機器就算不能達到一千倍的效果,至少也可以達到幾百倍的效果)Map and Reduce的另外一大特色是它可以利用大批廉價的機器組成功能強大的server farm最后,它的容錯性能異常出色,就算一個server farm里面的機器down掉一半,整個farm依然能夠運行正是因為這個天才的認識,才有了Map and Reduce算法借助該算法,Google幾乎能無限地增加計算量,與日新月異的互聯網應用一同成長

            算法并不局限于計算機和網絡

            舉一個計算機領域外的例子:在高能物理研究方面,很多實驗每秒鐘都產生幾個TB的數據量但因為處理能力和存儲能力的不足,科學家不得不把絕大部分未經處理的數據丟棄掉可大家要知道,新元素的信息很有可能就藏在我們來不及處理的數據里面同樣的,在其他任何領域里,算法都可以改變人類的生活例如人類基因的研究,就可能因為算法而發明新的醫療方式在國家安全領域,有效的算法可能避免下一個911的發生在氣象方面,算法可以更好地預測未來天災的發生,以拯救生命

            所以,如果你把計算機的發展放到應用和數據飛速增長的大環境下,你一定會發現,算法的重要性不是在日益減小,而是在日益加強

            給程序員的七個建議

            (1)練內功不要只花功夫學習各種流行的編程語言和工具,以及某些公司招聘廣告上要求的科目要把數據結構算法數據庫操作系統原理計算機體系結構計算機網絡,離散數學等基礎課程學好大家不妨試試高德納所著The Art of Computer Programming里的題目,如果你能夠解決其中的大部分題目,就說明你在算法方面有一定的功力了

            (2)多實戰通過編程的實戰積累經驗鞏固知識很多中國大學畢業生缺乏編程和調試經驗;學習C語言,考試過關就算學會了;課題項目中,只要程序能夠編譯,運行,并且輸入輸出滿足要求就算了事這些做法是不行的寫程序的時候,大家必須多想想如何把程序寫得更加精煉高效高質量建議大家爭取在大學四年中積累編寫十萬行代碼的經驗我們必須明白的是:好程序員是寫出來的,不是學出來的

            (3)求實干不要輕視任何實際工作,比如一些看似簡單的編碼或測試要不懈追求對細節一絲不茍的實干作風與敬業精神我發現不少程序員對于知識的掌握很膚淺,不求甚解,沒有好奇心,不會刨根問底比如,學會了C++,是否了解一個對象在編譯后,在匯編代碼中是如何被初始化的?這個對象的各個成員在內存中是如何存放的?當一個成員函數被調用時,編譯器在匯編代碼中加入了哪些額外的動作?虛函數的調用是如何實現的? 這些東西恐怕在編程語言或編譯原理中都沒有詳細提到,只有通過踏實的實干才能真正掌握

            (4)重視數學學習數學是思維的體操,數學無處不在學計算機至少要學習離散數學概率論布爾代數集合論和數理邏輯這些知識并不難,但是對你未來的工作幫助會很大 尤其當你對一些數學密集型的領域如視頻圖像處理等有興趣時,這些知識將成為你手中的利器

            (5)培養團隊精神,學會與人合作今天的軟件工程早已經不是一個人可以單獨操作的,而必須靠團隊合作才能成功不懂得合作的人是不能成大器的大家要多去尋找可以與人一起做項目的機會

            (6)激勵創新意識,培養好奇心,不要死記硬背沒有掌握某種算法技術的根本原理,就不會有應變和創新的能力想成為一位好程序員(其實從事任何一個行業都是如此),重要的是要養成鉆研,好奇,創新,動手,合作的優秀習慣,不滿足于填鴨,不滿足于考試交差,不滿足于表象這不是學幾門課能夠一蹴而就的

            (7)有策略地打工在不影響學業的前提下,尋找真正有意義的暑期工作或兼職去找一個重視技術的公司,在一個好的老板指導下完成真正會被用戶使用的程序不要急于去一個要你做頭而獨擋一面的地方,因為向別人學習才是你的目的找工作也是一樣,不要只看待遇和職銜,要挑一個你能夠學習的環境,一個愿意培養員工的企業,一個重視你的專業的公司最后,還要挑一個好老板

            希望大家都能把握機會,養成好的學習習慣,把算法學精學透;希望大家都能有一個美好的未來!

             該回復于2008-05-14 08:25:19被管理員刪除  The Art of Computer Programming Vol.1 (中文譯作計算機編程的藝術計算機程序設計技巧)--Basic Algorithms(基礎算法)

            這部書被譽為20世紀最重要的20部著作之一,與Einstein的相對論并列,使計算機科學領域的權威著作全書共分5卷,目前已經出版了3卷,這是它的第一卷基礎算法,包含了我們常用的算法及其相關數據結構作者高德納(Donald E. Knuth)是美國Stanford大學計算機科學系的退休教授,在計算機科學領域享有崇高的威望 


            本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/zdl1016/archive/2009/09/27/4602750.aspx

            posted @ 2009-09-28 09:47 life02 閱讀(263) | 評論 (0)編輯 收藏

            http://student.csdn.net/space.php?uid=32341&do=blog&id=1716

             1#include <stdio.h>    
             2int main(void)    
             3{    
             4    int n, nSum=1;// nSum 保存總和    
             5    scanf("%d"&n);// 輸入要分解的n    
             6    for(int n1=1, n2=n1; n1<=n/2; )// n1為最開頭的數,n2是最末尾    
             7    {    
             8        if(nSum<n)      //總和偏小    
             9        {    
            10            n2++;       //末尾加數    
            11            nSum+=n2;    
            12        }
                
            13        else if(nSum>n) //總和偏大    
            14        {    
            15            nSum -= n1; //開頭刪數    
            16            n1++;    
            17        }
                
            18        else //if(nSum==n) //相等就輸出結果    
            19        {    
            20            for(int t=n1; t<=n2; t++)    
            21            {    
            22                printf("%d,", t);    
            23            }
                
            24            printf("\n");    
            25            n2++;       //末尾加數,如果不加就會死循環    
            26            nSum+=n2;   //這步要小心    
            27        }
                
            28    }
                
            29    return 0;    
            30}
                
            31

            問題:還有更快的辦法嗎?請仔細觀察第一段代碼,看得出哪個特點可以利用不?

            關鍵就在那個通項公式,(n1+n2)*(n2-n1+1) == n*2
            這里如果先把n乘以2,然后的問題可不可以看成是因子分解?答案很明顯。
            假如分解出的結果是n*2 = a*b ,
            那就解方程組 n1+n2=a, n2-n1+1=b
            即n1=(a-b+1)/2, n2=(a+b-1)/2
            如果解出的結果n1和n2是整數的話(即要使a和b一奇一偶),顯然就得到一組解了
            而因子分解的復雜度是O(sqrt(n)),顯示會比之前第二段代碼要節省非常多的時間。

            posted @ 2009-09-28 09:03 life02 閱讀(606) | 評論 (1)編輯 收藏

            http://www.cnblogs.com/cgwolver/archive/2009/03/26/1257611.html
            假定在右手坐標系中的三角形3點坐標為A,B,C,判斷P是否在ABC之內

            ( 主要來自 3D引擎研發QQ群(38224573 )的各位朋友的討論 ,我僅僅算做個總結吧,特別感謝各位朋友的熱情支持。 )

            方法1:三個Perplane的方法

                       設AB,BC,AC邊上的垂直平面為Perplane[3],垂直朝向內側的法向為n[3]

                      1)先根據任意兩邊叉出法向N

                           N = AB.CrossProduct(AC);

                           N.Normalize();

                           D = A.DotProduct( N );

                      2)如果P在三角形所在平面之外,可直接判定不在平面之內( 假定方程為 ax+by+cz+d = 0 )

                           if( P.DotProduct( N ) + D > 0 ) return false;

                      3)然后法向和各邊叉出垂直平面的法向

                           n[0] = N.CrossProduct(AB); //朝向內側

                           n[0].Normalize();

                           Perplane[0].dist = A.DotProduct(n[0]);

                           Perplane[0].normal = n[0];

                           同樣方法求得Perplane[1],Perlane[2];

                      3)因為三個Perplane都朝向三角形內側,P在三角形內的條件是同時在三個Perplane前面;如果給定點P在任意一個垂直平面之后,那么可判定P在三角形外部

                           for( int i = 0;i<3;j++ )

                           {

                                if( P.DotProduct( Perplane[i].normal ) + Perplane[i].dist < 0 )

                                     return false;

                           }

                           return true;//如果P沒有在任意一條邊的外面,可判斷定在三角形之內,當然包括在邊上的情況

            方法2:三個部分面積與總面積相等的方法

                      S(PAB) + S(PAC) + S( PBC) = S(ABC) 則判定在三角形之內

                      用矢量代數方法計算三角形的面積為

                           S = 1/2*|a|*|b|*sin(theta)

                              = 1/2*|a|*|b|*sqrt(1-cos^2(theta))

                              = 1/2*|a|*|b|*sqrt(1- (a.DotProduct(b)/(|a|*|b|))^2);

                           另一種計算面積的方法是 S = 1/2*|a.CrossProduct(b)|

                           比較一下,發現后者的精確度和效率都高于前者,因為前者需要開方和求矢量長度,矢量長度相當于一次點乘,三個點乘加一個開方,顯然不如

                           后者一次叉乘加一次矢量長度(注,一次叉乘計算相當于2次點乘,一次矢量長度計算相當于一次點乘),后者又對又快。

                           

                           S(ABC)  = AB.CrossProduct(AC);//*0.5;

                           S(PAB)  = PA.CrossProduct(PB);//*0.5;

                           S(PBC)  = PB.CrossProduct(PC);//*0.5;

                           S(PAC)  = PC.CrossProduct(PA);//*0.5;

                           if( S(PAB) + S(PBC) + S(PAC) == S(ABC)  )

                                return true;

                           return false;

                     

                    另一種計算三角形面積的矢量方法是 1/2*a.CrossProdcuct(b) ,CrossProduct = ( y1*z2 - y2*z1 , x1*z2 - x2*z1, x1*y2 - x2*z1 )

                           可以看到CrossProduct 的計算要比DotProduct多3個乘法計算,效率沒有上面的方法高


            方法3:三個向量歸一化后相加為0

                    這個方法很怪異,發現自http://flipcode.spaces.live.com/blog/cns!8e578e7901a88369!903.entry 下面的一個回帖

                             
                          

                      如上圖三角形ABC,P為AB外側一點,N1,N2,N3 分別為BP,AP,CP的歸一化矢量;NM為N1,N2夾角的角平分線

                      可以看出角A-P-B是三角形內角,必然小于180度,那么角N1-P-N2等于A-P-B;NM是N1-P-N2的角平分線,那么角B-P-N等于角N-P-A,而CPN必然小于其中一個,

                      即小于180/2 = 90度。結論是角N1,N2的合矢量方向與N3的夾角為銳角。所以N1,N2,N3的合向量模大于1.

                      這里注意,N3不一定在N1,N2之間,不能假定N2-P-N3 和N3-P-N1這兩個角一定是銳角

                      同樣可以推導出如果P在三角形內,N1+N2+N3必然小于0;若N1+N2+N3 = 0則P在三角形的邊上。

                      有沒有更簡單的推導方法?

                     

                      這個方法看起來很精巧,但是善于優化的朋友會立刻發現,三個矢量歸一化,需要三個開方。迭代式開方太慢了,而快速開方有的時候又不滿足精度要求。

                             

             方法4:重心坐標之和為1

                     {

                           BaryCenter = ( S(PAB)/S(PABC),S(PBC)/S(PABC),S(PAC)/S(PABC)) // 點P在三角形內的重心坐標

                     

                           if( BaryCenter.x + BaryCenter.y + BaryCenter.z >0.f )

                                return false

                           return true;

                      }

                      其中S(PAB),S(ABC),S(PBC),S(PBC) 用上述的方法二種提到的計算三角形面積方法計算。

            綜合比較

                 方法1必須求叉乘,雖然可以通過首先排除不在平面內的點,但是后面仍要求三個叉乘和3個點乘(當然還可排除法優化)

                 方法2看起來之需要求4個點乘,如果用叉乘方法計算面積,可能會導致效率低下

                 方法3是看起來是最精巧的方法,但是效率也不能保證...3個開方

                 方法4和方法2的效率差不多

             

            本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/boyzk2008/archive/2009/08/07/4421106.aspx

            posted @ 2009-09-25 10:22 life02 閱讀(1624) | 評論 (8)編輯 收藏

            一.  單選題(每題4分,15題,共60分)

              1.考慮函數原型void hello(int a,int b=7,char* pszC="*"),下面的函數調用鐘,屬于不合法調用的是:

              A hello(5)     B.hello(5,8)     C.hello(6,"#")     D.hello(0,0,"#")

              2.下面有關重載函數的說法中正確的是:

              A.重載函數必須具有不同的返回值類型   B.重載函數形參個數必須不同

              C.重載函數必須有不同的形參列表       D.重載函數名可以不同

              3.分析一下程序的運行結果:

              #include<iostream.h>

              class CBase

              {

              public:

              CBase(){cout<<”constructing CBase class”<<endl;}

              ~CBase(){cout<<”destructing CBase class”<<endl;}

              };

              class CSub : public CBase

              {

              public:

              CSub(){cout<<”constructing CSub class”<<endl;}

              ~CSub(){cout<<”destructing CSub class”<<endl;}

              };

              void main()

              {

              CSub obj;

              }

              A. constructing CSub class           B. constructing CBase class

              constructing CBase class             constructing CSub class

              destructing CSub class               destructing CBase class

              destructing CBase class              destructing CSub class

              C. constructing CBase class

              constructing CSub class

              destructing CSub class

              destructing CBase class

              D. constructing CSub class

              constructing CBase class

              destructing CBase class

              destructing CSub class

              4.在一個cpp文件里面,定義了一個static類型的全局變量,下面一個正確的描述是:

              A.只能在該cpp所在的編譯模塊中使用該變量

              B.該變量的值是不可改變的

              C.該變量不能在類的成員函數中引用

              D.這種變量只能是基本類型(如int,char)不能是C++類型

              5.觀察下面一段代碼:

              class ClassA

              {

              public:

              virtual ~ ClassA(){};

              virtual void FunctionA(){};

              };

              class ClassB

              {

              public:

              virtual void FunctionB(){};

              };

              class ClassC : public ClassA,public ClassB

              {

              public:

              };

              ClassC aObject;

              ClassA* pA=&aObject;

              ClassB* pB=&aObject;

              ClassC* pC=&aObject;

              關于pA,pB,pC的取值,下面的描述中正確的是:

              A.pA,pB,pC的取值相同.               B.pC=pA+pB

              C.pA和pB不相同                      D.pC不等于pA也不等于pB

              6.參照1.5的代碼,假設定義了ClassA* pA2,下面正確的代碼是:

              A.pA2=static_cast<ClassA*>(pB);

              B.void* pVoid=static_cast<void*>(pB);

              pA2=static_cast<ClassA*>(pVoid);

              C.pA2=pB;

              D.pA2=static_cast<ClassA*>(static_cast<ClassC*>(pB));

              7.參照1.5的代碼,下面那一個語句是不安全的:

              A.delete pA   B.delete pB   C.delete pC

              8.下列程序的運行結果為:

              #include<iostream.h>

              void main()

              {

              int a=2;

              int b=++a;

              cout<<a/6<<endl;

              }

              A.0.5   B.0   C0.7   D.0.6666666-

              9.有如下一段代碼:

              #define ADD(x,y) x+y

              int m=3;

              m+=m*ADD(m,m);

              則m的值為:

              A.15   B.12   C.18   D.58

              10.如下是一個帶權的圖,圖中結點A到結點D的關鍵路徑的長度是:

              A.13       B.15       C.28       D.58

              11.下面的模板聲明中,正確的是:

              A.template<typename T1,T2>

              B.template<class T1,T2>

              C.template<class T1,class T2>

              D.template<typename T1;typename T2>

              12.在Windows編程中下面的說法正確的是:

              A.兩個窗口,他們的窗口句柄可以是相同的     B.兩個窗口,他們的處理函數可以是相同的

              C.兩個窗口,他們的窗口句柄和窗口處理函數都不可以相同.

              13.下面哪種情況下,B不能隱式轉換為A?

              A.class B:public A{}                 B.class A:public B{}
            C.class B{operator A();}             D.class A{A(const B&);}

              14.某公司使用包過濾防火墻控制進出公司局域網的數據,在不考慮使用代理服務器的情況下,下面描述錯誤的是”該防火墻能夠(   )”.

              A.使公司員工只能訪問Internet上與其業務聯系的公司的IP地址.

              B.僅允許HTTP協議通過,不允許其他協議通過,例如TCP/UDP.

              C.使員工不能直接訪問FTP服務器端口號為21的FTP地址.

              D.僅允許公司中具有某些特定IP地址的計算機可以訪問外部網絡

              15.數字字符0的ASCII值為48,若有以下程序:

              main()

              {

              char a=’1’,b=’2’;

              printf(“%c,”,b++);

              printf(“%d\n”,b-a);

              }

              程序運行之后的輸出結果是:

              A.3,2      B.50,2       C.2,2     D.2,50

              二.  填空題(共40分)

              本程序從正文文件text.in讀入一篇英文短文,統計該短文中不同單詞和它的出現次數,并按詞典編輯順序將單詞及它的出現次數輸出到正文文件word.out中.

              程序用一棵有序二叉樹存儲這些單詞及其出現的次數,一邊讀入一邊建立.然后中序遍歷該二叉樹,將遍歷經過的二叉樹上的節點的內容輸出.
            程序中的外部函數

              int getword(FILE* pFile,char* pszWordBuffer,int nBufferLen);

              從與pFile所對應的文件中讀取單詞置入pszWordBuffer,并返回1;若單詞遇文件尾,已無單詞可讀時,則返回0.

              #include <stdio.h>

              #include <malloc.h>

              #include <ctype.h>

              #include <string.h>

              #define SOURCE_FILE "text.in"

              #define OUTPUT_FILE "word.out"

              #define MAX_WORD_LEN 128

              typedef struct treenode

              {

              char szWord[MAX_WORD_LEN];

              int nCount;

              struct treenode* pLeft;

              struct treenode* pRight;

              }BNODE;

              int getword(FILE* pFile,char* pasWordBuffer,int nBufferLen);

              void binary_tree(BNODE** ppNode,char* pszWord)

              {

              if(ppNode != NULL && pszWord != NULL)

              {

              BNODE* pCurrentNode = NULL;

              BNODE* pMemoNode = NULL;

              int nStrCmpRes=0;

              ____(1)_____;pCurrentNode=*ppNode

              while(pCurrentNode)

              {

              /*尋找插入位置*/

              nStrCmpRes = strcmp(pszWord, ___(2)___ );pCurrentNode->nCount

              if(!nStrCmpRes)

              {

              ___(3)___; pCurrentNode->nCount++

              return;

              }

              else

              {

              ___(4)___; pMemoNode=pCurrentNode

              pCurrentNode = nStrCmpRes>0? pCurrentNode->pRight : pCurrentNode->pLeft;

              }

              }

              }

              pCurrent=new BNODE;

              if(pCurrentNode != NULL)

              {

              memset(pCurrentNode,0,sizeof(BNODE));

              strncpy(pCurrentNode->szWord,pszWord,MAX_WORD_LEN-1);

              pCurrentNode->nCount=1;

              }

              if(pMemoNode==NULL)

              {

              ___(5)___; *ppNode= pCurrentNode

              }

              else if(nStrCmpRes>0)

              {

              pMemoNode->pRight=pCurrentNode;

              }

              else

              {

              pMemoNode->pLeft=pCurrentNode;

              }

              }

              void midorder(FILE* pFile,BNODE* pNode)

              {

              if(___(6)___) return;!pNode||!pFile

              midorder(pFile,pNode->pLeft);

              fprintf(pFile,"%s %d\n",pNode->szWord,pNode->nCount);

              midorder(pFile,pNode->pRight);

              }

              void main()

              {

              FILE* pFile=NULL;

              BNODE* pRootNode=NULL;

              char szWord[MAX_WORD_LEN]={0};

              pFile=fopen(SOURCE_FILE,"r");

              if(pFile==NULL)

              {

              printf("Can't open file %s\n",SOURCE_FILE);

              return;

              }

              while(getword(pFile,szWord,MAX_WORD_LEN)==1)

              {

              binary_tree(___(7)___);// pRootNode,szWord

              }

              fclose(pFile);

              pFile=fopen(OUTPUT_FILE,"w");

              midorder(pFile,pRootNode);

              fclose(pFile);

              }

              三.  附加題(每題30分,2題,共60分)

              1.      從程序健壯性進行分析,下面的FillUserInfo函數和Main函數分別存在什么問題?

              #include <iostream>

              #include <string>

              #define MAX_NAME_LEN 20

              struct USERINFO

              {

              int nAge;

              char szName[MAX_NAME_LEN];

              };

              void FillUserInfo(USERINFO* parUserInfo)

              {

              stu::cout<<"請輸入用戶的個數:";

              int nCount=0;

              std::cin>>nCount;

              for(int i=0;i<nCount;i++)

              {

              std::cout<<"請輸入年齡:";

              std::cin>>parUserInfo[i]->nAge;

              std::string strName;
            std::cout<<"請輸入姓名:";

              std::cin>>strName;

              strcpy(parUserInfo[i].szName,strName.c_str());

              }

              }

              int main(int argc,char* argv[])

              {

              USERINFO arUserInfos[100]={0};

              FillUserInfo(arUserInfos);

              printf("The first name is:");

              printf(arUserInfos[0].szName);

              printf("\n");

              return 0;

              }

              2.      假設你在編寫一個使用多線程技術的程序,當程序中止運行時,需要怎樣一個機制來安全有效的中止所有的線程?請描述其具體流程.


            posted @ 2009-09-23 20:50 life02 閱讀(545) | 評論 (0)編輯 收藏

            #include <iostream>
            using namespace std;

            typedef 
            struct node{
                
            int key;
                
            int data;
                
            struct node *lchild,*rchild;
            }
            ;

            node
            * bt=NULL;

            int insertbst(node *&p,int k){
                
            if (p==NULL)
                
            {
                    p
            =(node*)malloc(sizeof(node));
                    p
            ->key=k;
                    p
            ->lchild=p->rchild=NULL;
                    
            return 1;
                }

                
            else if (k==p->key)
                
            {
                    
            return 0;
                }
            else if (k<p->key)
                
            {
                    
            return insertbst(p->lchild,k);
                }
            else
                
            {
                    
            return insertbst(p->rchild,k);
                }

            }


            node
            * creatbst(int* a,int n){
                
                
            int i=0;
                
            while(i<n){
                    insertbst(bt,a[i]);
                    
            ++i;
                }

                
            return bt;
            }


            void preorder(node* bt){
                
            if (bt!=NULL)
                
            {
                    cout
            <<bt->key<<endl;
                    preorder(bt
            ->lchild);
                    preorder(bt
            ->rchild);
                }

            }




            int main(){
                
            int a[5]={12,3,4,8,10};
                node
            * bl=new node();
                bl
            =creatbst(a,5);
                preorder(bt);

                
            return 0;
            }
            posted @ 2009-09-21 22:46 life02 閱讀(152) | 評論 (0)編輯 收藏

            http://blog.csdn.net/robinfoxnan/archive/2008/07/25/2712030.aspx
            1. 簡單實現
            如果不管效率,最簡單的實現只需要4行代碼:

            1 size_t strlen_a(const char * str) {
            2     size_t length = 0 ;
            3     while (*str++ )
            4         ++ length;
            5     return  length;
            6 }
            也許可以稍加改進如下:


            1 size_t strlen_b(const char * str) {
            2     const char *cp =  str;
            3     while (*cp++ )
            4          ;
            5     return (cp - str - 1 );
            6 }

            本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/robinfoxnan/archive/2008/07/25/2712030.aspx

            posted @ 2009-09-21 22:18 life02 閱讀(371) | 評論 (0)編輯 收藏

            僅列出標題
            共20頁: First 12 13 14 15 16 17 18 19 20 
            欧美亚洲另类久久综合婷婷| 国产激情久久久久影院老熟女免费| 77777亚洲午夜久久多喷| 日韩美女18网站久久精品| 久久99国产精品久久99| 久久久久亚洲av无码专区喷水| 亚洲精品无码专区久久同性男| 狠狠综合久久综合中文88 | 久久天天日天天操综合伊人av | 人人狠狠综合久久亚洲88| 久久婷婷五月综合色高清 | 久久久久久国产精品无码超碰| 久久亚洲精品无码VA大香大香| 亚洲国产成人久久精品99| 色综合久久88色综合天天 | 性做久久久久久久久久久| 人妻系列无码专区久久五月天| 国产精自产拍久久久久久蜜| 亚洲综合婷婷久久| 久久精品视频网| 大美女久久久久久j久久| 久久国产免费直播| 一个色综合久久| 国产成人久久精品一区二区三区 | 久久亚洲国产欧洲精品一 | 久久国产免费直播| 久久久无码精品亚洲日韩京东传媒 | 思思久久精品在热线热| 亚洲精品高清国产一线久久| 久久亚洲欧美国产精品| 日本精品久久久久中文字幕| 久久www免费人成精品香蕉| 人妻中文久久久久| 久久精品国产亚洲AV无码偷窥| 九九99精品久久久久久| 无码精品久久一区二区三区| 色综合久久无码五十路人妻| 久久精品国产欧美日韩| 亚洲香蕉网久久综合影视| 天天综合久久久网| 亚洲精品乱码久久久久久久久久久久|