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

            天之道

            享受編程的樂趣。
            posts - 118, comments - 7, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

            編寫一遞歸函數將一根整數n轉換成字符串,例如輸入482,應輸出字符串“482”。n的位數不確定,可以是任意位數的整數。

            代碼測試通過:

            #include<stdio.h>
            #include<string.h>
            void IntToStr(int n);
            char str[80]={0};
            int main()
            {
                int num;
                printf("input an integer number: ");
                scanf("%d",&num);
                IntToStr(num);
                printf("The string is: %s\n",str);
                return 0;
            }

            void IntToStr(int n)
            {
                int i;
                if(n == 0)
                    return;
                for(i=strlen(str)-1;i>=0;i--)
                    str[i+1]=str[i]; //向后移一位
                str[0]=n%10+0x30; //最開始輸入的數字最后一位放在str[0],隨后向后移,直到n==0 
                IntToStr(n/10); //n不斷取除個位的其他高位數
            }




                

            posted @ 2012-08-12 09:58 hoshelly 閱讀(835) | 評論 (0)編輯 收藏

            輸入若干個單詞,輸出它們的平均長度。單詞只包括大寫字母和小寫字母,用一個空格隔開。

            代碼測試通過:

            #include<stdio.h>
            #include<string.h>
            int main()
            {
                char s[1000];
                char *p;
                p=&s[0];
                int len=0,tot=0,ws=0,per_len,i;
                gets(s);
                len=strlen(s);
                for(i=0;i<=len;i++)
                {
                    if( *p >='a' && *p<='z' || *p >='A' && *p<='Z')
                    {
                        tot++;
                        p++;
                    }

                    else if( *p == ' ' || *p =='\0')
                    {
                        ws++;
                        p++;
                    }
                }

                per_len=tot/ws;
                printf("%d\n",per_len);

                return 0;
            }

            posted @ 2012-08-11 23:11 hoshelly 閱讀(575) | 評論 (0)編輯 收藏

            輸入正整數n<=20,輸出一個n層的倒三角形,例如n=5時輸出如下:

            #########
              #######
                #####
                  ###
                    #

            代碼測試通過:

            #include<stdio.h>
            int main()
            {
                int n,s,i,j,k,c=0;
                scanf("%d",&n);
                s=2*n-1;
                for(i=0;i<n;i++)
                {
                      if(c!=0) //如果不是第一行,即s要減2,作為輸出#的個數
                          s=s-2;
                      for(k=0;k<c;k++)
                      {
                        printf(" ");
                      }
                      for(j=0;j<s;j++)
                      {
                        printf("#");
                      }
                      for(k=0;k<c;k++)
                      {
                          printf(" ");
                      }
                      c++;
                    

                    printf("\n");
                }
                return 0;
                    
            }
                    

            posted @ 2012-08-10 20:24 hoshelly 閱讀(457) | 評論 (0)編輯 收藏

            刪數問題
            時間限制:1000 ms  |  內存限制:65535 KB
            描述

                       給出一個N位正整數(首位不為0),去掉其中S個數字后剩下的數字按左右次序組成一個新的N-S位正整數(首位不能為0)。對給定的N和S,尋找一種刪數規則使得剩下得數字組成的新數最小。

            輸入
                     第一行一個正整數T ,表示有T組測試數據。

                    對于每組測試數據:第一行兩個正整數 n ,s (s<  n <= 10, 000) (用空格隔開); 第二行為一個n 位正整數。

            輸出
                     對于每組測試數據輸出一行:最小的新數。

            樣例輸入
            2
            10 2
            1234334789
            11 3
            90019008798
            樣例輸出
            12333478
            19008798

            代碼:

            #include<stdio.h>
            int main()
            {
                int t,n,s,i,j,c=0;
                char str[1200];
                char *p,*sp;
                scanf("%d",&t);
                while(t--)
                {
                    i=0;
                    scanf("%d%d",&n,&s);
                    scanf("%s",str);
                    p=&str[0];
                    sp=&str[1];
                    while(*sp !='\0')
                    {
                        if(str[0] =='0')
                        {
                            for(j=0;j<n-c;j++)
                            {
                               str[j]=str[j+1];
                            }
                            c++;
                        }
                        if(*p == str[0] && *p > *sp)
                        {
                            for(j=0;j<n-c;j++)
                            {
                               str[j]=str[j+1];
                            }
                            i++;
                            p++;
                            sp++;
                            continue;
                        }
                        for(;*p > *sp;*p--,*sp--)
                        {
                            if(c != s)
                            {
                              for(j=i;j<n-c;j++)
                              {
                                 str[j]=str[j+1];
                              }
                              i--;
                              c++;
                            }
                        }
                      if(c != s && str[0] !='0')
                      {
                        p++;
                        sp++;
                        i++;
                      }
                       if(c == s)
                       {
                           break;
                       }
                    }

                    for(i=0;i<n-s;i++)
                    {
                        printf("%c",str[i]);
                    }
                    printf("\n");
                }

                return 0;
            }

            posted @ 2012-08-10 11:44 hoshelly 閱讀(1069) | 評論 (0)編輯 收藏

            我們學習Linux的時候勢必要學習一大堆對于大部分正常人來說枯燥無比的命令行,因為是第一次嘗試在一個黑箱子里面敲一串一串不熟悉的命令,可以理解的啦。現在我總結出一些Linux中比較常用的命令行。

            一)列出文件:ls ,如果要列出本目錄下的文件屬性呢,例如想知道他們的文件權限、大小、日期,那么就用 ls -l ,也可用其命令別名 ll 。
                               我們都知道Linux中都有一些隱藏的文件,那么如何顯示出它們呢?用 ls -a 即可顯示出所有文件,包括隱藏文件。要列出這些文件的屬性,用 ls -al 
                               列出目錄用:ls -d
                               如果我們想找出一個特定的文件如file 的信息,那么可以用ls  -l file ,又如要尋找一個前綴為test的文件的信息,可以這樣:ls -l test*,*為通配符。
                               如果我們想找出文件名中帶有數字或字母的相關文件,可以這樣 : ls -f [0-9]* / ls -f [a-z]*

            二)打開文件或目錄:如想打開名為 file.txt文件,用cat file.txt即可顯示出內容。如想把文件內容的行號顯示出來,用 cat -n file.txt 即可 ;打開目錄tmp 則用 cd tmp

            三)復制文件: 如想把文件file.txt 復制到目錄 /test 下,即可用:cp file.txt /test ;如想把目錄 /etc/ 的所有內容復制到 /tmp,用:cp /etc/ /tmp

            四)刪除文件或目錄:如想刪除文件file.txt 則可: rm file.txt 。如想把目錄tmp(包括有內容的目錄)都刪除掉,用 rm -rf tmp ,而 rmdir tmp 刪除的是一個空目錄。

            五)移動文件或重命名:如把文件file.txt移動到目錄tmp中: mv file.txt tmp 。把文件file.txt重命名為 test.txt,則可: mv file.txt test.txt

            六)翻頁查看命令:1. 如想查看/etc/中的文件man.config,可 more /etc/man.config ,敲空格鍵表示向下翻一頁;Enter表示向下翻“一行”;/字符串可以向下搜索字符串:如搜索word,可以 /word ;離開more 可以用 q ;2. 也可用 less 進行翻頁操作:less /etc/man.config ,使用less可以向前或向后翻頁,而more只能向后翻頁;?字符串表示向前搜索的功能,其他操作和more 大體相同。

            七)創建新文件或目錄 : 如創建新文件 test.txt 可以: touch test.txt ;創建目錄abc,用命令:mkdir abc . 如果我們要創建一個名為junk.data ,大小為1M,內容為空的文件,該怎么辦呢?可以使用命令: dd if=/dev/zero of=junk.data bs=1M count=1 即可,其中dd是用來創建特定大小文件的命令,dd命令會克隆給定的輸入內容,然后將一模一樣的一份副本寫入到輸出,stdin、設備文件、普通文件都可以作為輸入. if 代表輸入文件, of 代表輸出文件, bs代表以字節為單位的塊大小,count代表要被復制的塊數。

            八)改變文件的權限: 1. 使用符號方法改變文件權限:在此之前了解下who /action 的知識,u表示屬主、g表示組、o表示其他、a表示所有;+表示增加文件權限、-表示減少文件權限、=明確地設置文件權限。好了,如果現在我們想把一個目錄下的所有文件都改變為對所有人均可訪問,則可用命令:chmod a=r * (或chmod guo=r *),注意空格。
            如果想阻止除了文件屬主之外的任何人寫文件 test.txt ,可用命令: chmod go-w test.txt 
            2. 使用八進制方法改變文件權限:r=4,w=2,x=1. 把各個想要賦予的權限值相加即可得到用來指定文件屬主、組和其他用戶對文件的權限。 如:對文件test.txt 改為對所有均有讀、寫、執行的權限:chmod 777 test.txt

            九)改變文件屬主和組: 1. 改變文件屬主:如把文件test.txt 改變為 zlb 所屬有,則可 chown zlb: test.txt ,冒號不能省略。 2. 改變文件所屬的組:可以用1中 chown :authors test.txt 改變文件test.txt所屬的組;也可以用 chgrp authors test.txt 改變文件為authors這個組所有。


            posted @ 2012-08-02 11:49 hoshelly 閱讀(215) | 評論 (0)編輯 收藏

            shell是和unix系統交流的語言,它是unix系統的工具,利用它可以來和操作系統的核心功能進行交互。
            1)兩種模式:交互式和非交互式Shell;所謂交互,即用戶編寫shell命令行來和操作系統交互。而在非交互模式下,不需要用戶直接敲命令行,而是通過shell讀命令之后,(就存在文件里),然后再執行,當文件結束的時候,就退出。
            2)啟動交互式shell:$ /bin/bash
                                        bash$
            第一個$是登陸系統時就有的,第二個bash$是由用戶啟動的Shell來顯示的。這樣一來就有了兩個交互式的shell,可以用來測試之用。退出第二個shell可用命令:
            exit,然后就會回到原先的shell。
            3)啟動非交互式shell:$ /bin/sh filename
            這里的filename指的是可執行的文件,比如用shell寫  echo 'hello world!' 放在一個命名為hello的文件里,要執行它的時候,就要用到命令 /bin/sh hello
            4)基本命令行總結如下:
            $ ls :列出當前目錄的內容;
            $ ls -a :列出當前目錄包括不可見文件的內容;
            $ man ls :獲取關于ls命令的有關信息;注:不懂的命令要及時找man
            $ cat [filename] :查看文件的內容
            $ wc files :獲取文件內容的行、單詞和字符的數目;
            $ wc -l file :統計行數
            $ wc -w file: 統計單詞
            $ wc -m file: 統計字符
            $ cp src dest :拷貝文件;src:被拷貝文件 、dest:拷貝到的目錄
            $ mv src dest :更改文件名
            $ rm file :刪除文件
            $ ls dir :列出目錄
            $ mkdir dir :創建目錄dir
            $ cp -r src dest : 拷貝文件和目錄; src:拷貝文件的目錄的路徑、dest:拷貝被放置的目錄的路徑
            $ mv src dest :移動目錄
            $ rmdir dir:刪除目錄dir(內容為空的)
            $ rm-r dir: 刪除目錄dir及其內容(無論內容是否為空)

            好了,先介紹這些,以后會陸續更新。

            posted @ 2012-06-09 02:47 hoshelly 閱讀(220) | 評論 (0)編輯 收藏

            掌握Linux學習方法學好Linux
            如果你愛好學習知識,尤其是Linux操作系統知識,隨著Linux應用的擴展,許多朋友開始接觸Linux,可你不知道去哪里找到這些知識,來這里,讓你更加了解Linux學習方法。讓你全面掌握Linux學習方法。

            1.學習的目的

            通過Linux的學習掌握UNIX的目的想必不用多說了,在這個網絡人才身價倍增的年代,想靠技術吃飯又不想掌握網絡和編程技術是不明智的。當人們第一次聽說Linux并躍躍欲試的時候,總會提出幾個?,它是什么(What)?為什么要用它(Why)?怎樣學習它(How)?作為開放源碼運動的主要組成部分,Linux的應用越來越廣泛,從我們平時的娛樂、學習,到商業、政府辦公,再到大規模計算的應用。為了滿足人們的需求,各種各樣的、基于Linux的應用軟件層出不窮。只要具備了LinuX的基本功,并具有了自學的能力之后,都可以通過長期地學習予以掌握。

            2.從命令開始、從基礎開始

            常常有些朋友一接觸Linux就希望構架網站,根本沒有想到要先了解一下Linux的基礎。這是相當困難的。雖然Linux桌面應用發展很快,但是命令在Linux中依然有很強的生命力。Linux是一個命令行組成的操作系統,精髓在命令行,無論圖形界面發展到什么水平這個原理是不會變的。Linux命令有許多強大的功能:從簡單的磁盤操作、文件存取、到進行復雜的多媒體圖象和流媒體文件的制作。這里筆者把它們中比較重要的和使用頻率最多的命令,按照它們在系統中的作用分成幾個部分介紹給大家,通過這些基礎命令的學習,我們可以進一步理解Linux系統。

            3.選擇一本好的Linux書籍

            無論在論壇還是讀者反饋中,我們看到最多的問題往往是某個新手,在安裝或使用Linux的過程中遇到一個具體的問題就開始提問,很多都是重復性的問題,甚至有不少人連基本的問題描述都不是很清楚。這說明很多初學Linux的人還沒有掌握基本功。怎樣才能快速提高掌握Linux的基本功呢?最有效的方法莫過于學習權威的Linux工具書,工具書對于學習者而言是相當重要的。一本錯誤觀念的工具書卻會讓新手整個誤入歧途。目前國內關于Linux的書籍有很多不過精品的不多,筆者強烈建議閱讀影印本的o'reilly原版Linux圖書http://www.oreilly.com.cn/,而且出版社還提供了一個非常好的路線圖:linux.php">http://www.oreilly.com.cn/guide/guide_linux.php

            4.養成在命令行下工作的習慣

            一定要養成在命令行下工作的習慣,要知道X-window只是運行在命令行模式下的一個應用程序。在命令行下學習雖然一開始進度較慢,但是熟悉后,你未來的學習之路將是以指數增加的方式增長的。對網管員來說,命令行實際上就是規則,它總是有效的,同時也是靈活的。即使是通過一條緩慢的調制解調器線路,它也能操縱幾千公里以外的遠程系統。 5.用UNIX思維思考Linux

            由于Linux是參照UNIX的思想來設計的,理解和掌握它就必須以Unix的思維來進行,而不能以Windows思維。不可否認,Windows在市場上的成功很大一部分在于技術思想的獨到之處。可是這個創新是在面對個人用戶的前提下進行的,而面對著企業級的服務應用,它還是有些力不從心。多年來在計算機操作系統領域一直是二者獨大:UNIX在服務器領域,Windows在個人用戶領域。由此可見,用戶需求決定了所采用的操作系統。不管什么原因,如果要學習Linux,那么首先要將思維從Windows的"這個小河"中拖出來,放入UNIX的海洋。

            6.學習Shell

            對于Shell(中文名稱殼),習慣Windows的讀者肯定是非常陌生的,因為Windows只有一個"Shell"(如果可以說是Shell的話),那就是Windows自己。用一句話容易理解的解釋就是,shell是用戶輸入命令與系統解釋命令之間的中介。最直觀的說法,一種Shell有一套自己的命令。舉一個容易理解的例子,Linux的標準Shell是Bash Shell;Solaris的shell是B shell;Linux的Shell是以命令行的方式表現出來的。讀者可能會不理解,Windows從命令行"進化"到了圖形界面,那么Linux現在還使用命令行豈不是一種倒退?當初我剛剛接觸Linux時就曾有過這種想法。可是后來發現,如果使用圖形界面,那么分配給應用軟件的資源就少了,在價格昂貴的服務器上,能夠以較低的硬件配置實現同樣的功能是非常重要的。

            下面舉例說明:一臺服務器有1GB內存,假設其中512MB用于處理圖形界面,若要安裝一個需要784MB內存的數據庫軟件,唯一的辦法就是擴大內存。但是如果使用命令行,系統可能只需要64MB內存,其他的內存就可以供數據庫軟件使用了。使用命令行,不僅是內存,而且CPU及硬盤等資源的占用都要節省很多。所以,作為服務器,使用命令行是優點而不是缺點。既然Shell有這么多優點,就必須要學習它。

            7.勤于實踐

            要增加自己Linux的技能,只有通過實踐來實現了。所以,趕快找一臺計算機,趕快安裝一個Linux發行版本,然后進入精彩的Linux世界。相信對于你自己的Linux能力必然大有斬獲。此外,人腦不像計算機的硬盤一樣,除非硬盤壞掉了或者是資料被你抹掉了,否則存儲的資料將永遠而且立刻地記憶在硬盤中。在人類記憶的曲線中,你必須要不斷地重復練習才會將一件事情記得比較熟。學習Linux也一樣,如果你無法經常學習的話,學了后面的,前面的往往忘了。對Linux命令熟悉后,可以開始搭建一個小的Linux網絡,這是最好的實踐方法。Linux是網絡的代名詞,Linux網絡服務功能非常強大,不論是郵件服務器、Web服務器、DNS服務器等都非常完善。當然你不需搭建所有服務,可以慢慢來。需要說明的是這個Linux網絡對于初學者有兩三臺計算機即可。自己多動手,不要非要等著別人幫你解決問題。

            8.學會使用文檔

            和私有操作系統不同,各個Linux的發行版本的技術支持時間都較短,這對于Linux初學者是往往不夠的。其實當你安裝了一個完整的Linux系統后,其中已經包含了一個強大的幫助系統,只是可能你還沒有發現和使用它們的技巧。主流Linux發行版都自帶非常詳細的文檔(包括手冊頁和FAQ),從系統安裝到系統安全,針對不同層次的人的詳盡文檔,仔細閱讀文檔后40%問題都可在此解決。查閱經典工具書和Howto,特別是Howto是全球數以萬計的Linux、UNIX的經驗總結非常有參考價值,通常40%的問題可以解決。安裝一個新的軟件時先看README,再看INSTALL然后看FAQ,最后才動手安裝,這樣遇到問題就知道為什么了。如果說明文檔不看,結果出了問題再去論壇來找答案反而浪費時間。

            當查找文檔時,一定要看文檔是在何種版本、何種環境及何種狀態下出現的何種結果。對于文檔的有效性,一時還無法在操作前就知道結論如何,那么對某個專題或問題,閱讀相關的多篇文章將會節省大量的時間,還可以保證盡量"干凈"的環境,有效避免因為不同操作所造成的更多問題。操作時要仔細核對各個步驟及輸出的結果,盡量保持與文檔一致。 9.在Linux論壇獲取幫助

            如果上面的措施沒有解決問題,此時你就需要Linux社區的幫助了。需要說明的是你要有周全的思考,準備好你的問題,不要草率的發問,否則只會得到到草率的回答或者根本得不到任何答案。越表現出在尋求幫助前為解決問題付出的努力,你越能得到實質性的幫助。最好先搜尋一下論壇是否有你需要的文章。這樣可以獲得事半功倍的效果。

            你需要提供精確有效的信息。這并不是要求你簡單的把成噸的出錯代碼或者數據完全轉儲摘錄到你的提問中。如果你有龐大而復雜的測試條件,盡量把它剪裁得越小越好。可能你會遇到這種情況,對于一個問題會出現不同內容回答,這時你需要通過實踐來驗證。另外把這個問題放在其他Linux社區請求幫助也是一種選擇。如果得不到答案,請不要以為我們覺得無法幫助你。有時只是看到你問題的人不知道答案罷了。這時換一個社區是不錯的選擇。

            10.學習專業英文

            如果你想深入學習Linux,看不懂文檔,因為實在是太難了。寫得最好的,最全面的文檔都是英語寫的,最先發布的技術信息也都是用英語寫的。即便是非英語國家的人發布技術文檔,也都首先翻譯成英語在國際學術雜志和網絡上發表。

            通過man、info等命令,可以從在線幫助中快速地獲得所需要的命令和操作方法。不要害怕海量的系統幫助,仔細閱讀幾個man或info文檔就會發現,這些幫助幾乎都按照固定格式寫成命令名稱、參數、參數說明、使用例子、參考等。當英語成為一種習慣,就會自覺地查找或訂閱互聯網上感興趣的英文材料。這樣,在不知不覺中就已經和世界同步了。

            11.在社區共享你的經驗

            隨著Linux應用的擴展,出現了不少Linux社區。其中有一些非常優秀的社區:水木清華、其中有一些非常優秀的社區:www.linuxforum.net(國內最高水平GNU站點)、http://www.chinaunix.net/(中國最大的Unix技術社區),隨著知識的不斷積累,就可以把自己動手解決一些前人沒有遇到的問題寫出文檔在網絡上共享給其他讀者。這個時候,也就成為了一名"高手"。Linux的使用者一般都是專業人士,他們有著很好的電腦背景且愿意協助他人,Linux高手更具有鼓勵新手的文化精神。

            最后是筆者的Linux學習的一個路線圖(roadmap):

            了解Linux的基礎知識,這些包含了用戶管理、群組的概念、權限的觀念等;

            掌握100個以上的常用命令;

            掌握.tgz、.rpm等軟件包的常用安裝方法

            學習添加外設,安裝設備驅動程序(比如網卡)

            熟悉Linux文件系統和目錄結構。

            掌握vi,gcc,gdb等常用編輯器,編譯器,調試器。

            理解shell別名、管道、I/O重定向、輸入和輸出及shell腳本編程。

            網絡的基礎包括:掌握路由概念、OSI七層網絡模型、TCP/IP模型及相關服務對應的層次對于Linux學習非常重要的。然后學習Linux環境下的組網。

            以上是Linux學習方法,希望對你有些幫助。

            posted @ 2012-06-08 18:18 hoshelly 閱讀(342) | 評論 (0)編輯 收藏


            建立一個鏈表,其中的節點包括學號,成績信息。要求用動態插入鏈表的方法實現,就是輸入第一個節點信息時,則必須創建該鏈表,之后每輸入一個學生節點的基本信息,就把該節點插入到已有的鏈表當中。要求按照學號順序插入。輸入的時候可以不按照學號的順序,輸入0 0 表
            示輸入結束。
            (不允許對輸入的數據排序后再創建鏈表)

            Sample Input

            1 50
            4 60
            2 70
            3 80
            5 64
            0 0 

            Sample Output

            The list is:
            1 50
            2 70
            3 80
            4 60
            5 64



            #include<stdio.h>
            #include<stdlib.h>

            struct student
            {
                int number;
                float score;
                struct student *next;
            };

            int main()
            {
                int n=0;
                struct student *head,*p1;
                p1=(struct student*)malloc(sizeof(struct student));
                scanf("%d %f",&p1->number,&p1->score);
                head=p1;
                head->next=NULL;
                while(p1->number!=0 && p1->score!=0)
                {
                      n++;
                      p1->next=(struct student*)malloc(sizeof(struct student));
                      p1=p1->next;
                      p1->next=NULL;
                      scanf("%d %f",&p1->number,&p1->score);
                }
                
                struct student *p3,*p4;
                p3=(struct student*)malloc(sizeof(struct student));
                p4=(struct student*)malloc(sizeof(struct student));
                for(int i=0;i<n;i++) 
                {    
                    p3=head;
                    for(int j=0;j<n-i-1;j++)
                    {
                        p4=p3->next;
                        if(p3->number>p4->number)
                        {
                            int k=p3->number;
                            p3->number=p4->number;
                            p4->number=k;
                            float m=p3->score;
                            p3->score=p4->score;
                            p4->score=m;
                        }
                        p3=p3->next;
                    }
                }
                printf("The list is:\n");
                 p3=head;
                 do
                 {
                  if(p3->number ==0 && p3->score==0)
                      continue;
                  printf("%d %.0f\n",p3->number,p3->score); 
                  p3=p3->next;
                }while(p3!=NULL);

                free(p1);
                free(p3);
                free(p4);
                return 0;
            }
                

            posted @ 2012-05-12 10:29 hoshelly 閱讀(1814) | 評論 (0)編輯 收藏

            輸入
            第一行包含一個整數T,表示有T組測試數據。對于每組測試數據:第一行包含一個整數N,表示有N個元素(N不大于50),第二行包含N個整數,表示這N個元素(各個元素的值小于1000)。

            輸出
            對于每組測試數據,輸出一行,包含一個數據即返回的最小值。

            樣例輸入
            2
            3
            3 2 1
            5
            -1 5 3 -2 4
            樣例輸出
            1
            -2

            解法一:
            將一個數組,分成兩部分,然后求出兩部分中的最小值,當然這里有一個要考慮的情況是,然后元素的個數為奇數個的時候,我們可以將其分為三部分,中間元素,前半部分,后半部分。然后使用遞歸的方法,求出數組元素中的最小值。

            #include<stdio.h>
            int Min(int a[],int n)
            {
                int a1,a2,a3;
                if(n==1)
                    return a[0];
                if(n%2==0)
                {
                    a1=Min(a,n/2);
                    a2=Min(a+n/2,n/2);
                    if(a1>a2)
                        return a2;
                    else
                        return a1;
                }
                else
                {
                    a1=Min(a,n/2);
                    a2=Min(a+n/2+1,n/2);
                    a3=a[n/2];
                    if(a1>a2)
                    {
                        if(a2>a3)
                            return a3;
                        else
                            return a2;
                    }
                    else
                    {
                        if(a1>a3)
                            return a3;
                        else
                            return a1;
                    }
                }
                
            }


            int main()
            {
                int n,m,i;
                int a[50];
                scanf("%d",&n);
                while(n--)
                {
                    scanf("%d",&m);
                    for(i=0;i<m;i++)
                    {
                        scanf("%d",&a[i]);
                    }
                    printf("%d\n",Min(a,m));
                }
                return 0;
            }

            解法二:
            代碼如下
            #include<stdio.h>
            int Min(int a[],int n)
            {
                if(n==0)
                    return a[0];
                else
                    return ((Min(a,n-1)<a[n])? Min(a,n-1):a[n]);
                
            }


            int main()
            {
                int n,m,i;
                int a[50];
                scanf("%d",&n);
                while(n--)
                {
                    scanf("%d",&m);
                    for(i=0;i<m;i++)
                    {
                        scanf("%d",&a[i]);
                    }
                    printf("%d\n",Min(a,m-1));
                }
                return 0;
            }


            posted @ 2012-05-09 00:50 hoshelly 閱讀(3074) | 評論 (0)編輯 收藏

            輸入

            第一行包含一個整數T,表示有T組數據。對于每組數據:第一行包含一個數字N(<100),表示該組數據由N個元素;第二行包含N個數,就是這N個元素的值( <10000 )。

            輸出

            對于每組數據輸出一行,包含排序好后的N個元素,要求從小到大排序,相鄰2個元素間有個空格,末尾無空格有個回車。

            樣例輸入
            1 3 1 3 2
            樣例輸出
            1 2 3


            #include<stdio.h>
            void swap(int a[],int low,int high)
            {
                
            int temp=a[low];
                a[low]
            =a[high];
                a[high]
            =temp;
            }

            int partition(int a[],int low,int high)
            {
                
            int pivotkey=a[low];
                
            while(low<high)
                {
                    
            while(low<high && a[high]>=pivotkey)
                        high
            --;
                    swap(a,low,high);
                    
            while(low<high && a[low]<=pivotkey)
                        low
            ++;
                    swap(a,low,high);
                }
                
            return low;
            }

            void qsort(int a[],int low,int high)
            {
                
            int pivot;
                
            if(low<high)
                {
                    pivot
            =partition(a,low,high);
                    qsort(a,low,pivot
            -1);
                    qsort(a,pivot
            +1,high);
                }
            }


            int main()
            {
                
            int n,m,i,a[102];
                scanf(
            "%d",&n);
                
            while(n--)
                {
                    scanf(
            "%d",&m);
                    
            for(i=0;i<m;i++)
                    {
                        scanf(
            "%d",&a[i]);
                    }

                    qsort(a,
            0,m-1);

                        
                    
            for(i=0;i<m;i++)
                    {
                        printf(
            "%d ",a[i]);
                    }
                    printf(
            "\n");

                }

                
            return 0;
            }

            posted @ 2012-05-08 17:11 hoshelly 閱讀(133) | 評論 (0)編輯 收藏

            僅列出標題
            共12頁: First 3 4 5 6 7 8 9 10 11 Last 
            亚洲AV日韩精品久久久久久久| 久久国产精品免费一区| 亚洲人成无码www久久久| 久久久高清免费视频| 午夜不卡久久精品无码免费| 99精品国产在热久久| 国产福利电影一区二区三区,免费久久久久久久精 | 香蕉久久夜色精品国产2020| 无码国内精品久久人妻蜜桃| 久久99热这里只有精品国产| 亚洲国产另类久久久精品| 国产精品午夜久久| 婷婷五月深深久久精品| 亚洲精品WWW久久久久久| 国内精品久久久久久野外| 亚洲美日韩Av中文字幕无码久久久妻妇 | 久久精品国产亚洲5555| 一本色道久久88—综合亚洲精品 | 久久中文字幕无码专区| 久久夜色精品国产噜噜麻豆| 久久久久国色AV免费观看| 国产精品久久久久久久久| 亚洲午夜久久久久妓女影院| 久久影院久久香蕉国产线看观看| 久久91精品国产91久久小草| 亚洲国产高清精品线久久| 99精品久久精品一区二区| 亚洲人成网亚洲欧洲无码久久 | 人妻少妇久久中文字幕一区二区 | 欧美日韩精品久久久久| 久久青草国产手机看片福利盒子| 亚洲成色www久久网站夜月| 亚洲另类欧美综合久久图片区| 国产高潮国产高潮久久久91| 欧美激情精品久久久久| 国产国产成人精品久久| 久久天天躁狠狠躁夜夜96流白浆| 伊人久久大香线蕉亚洲五月天 | 久久夜色tv网站| 精品无码久久久久久国产| 久久福利片|