HDU 1425 1280 3785 前m大數

來源:互聯網
上載者:User

           這三題都是尋找前m大數。所以,貼在一起,有個比較。          

           1425和1280的主要思想是一樣的:空間換時間。但並不是每一道排序題都可以這樣做,有條件限制才可以,什麼條件呢?1425的條件是:每個整數範圍[-500000,

     500000]。1280的條件是:每個正整數不大於5000,所以兩數相加範圍為[2,10000]。這樣就可以用一個輔助數組來記錄了,詳見代碼。但3785就不可以,必須排序。

     因為題目不能提煉出前兩題的限制條件。

          1425代碼:

           這題還要注意的是:

           ①所要的整型數組空間較大,不能直接放到main()內申請。定義全域變數。因為,函數內變數放在棧中,大了就會stake_overflow了,全域變數放在堆中,可以申請較

               大空間。

           ②最好用C中輸入輸出scanf、printf,用cin、cout逾時了。

#include <iostream>using namespace std;int b[1000001];int main(){int tem,i,n,m;while(cin>>n>>m){memset(b,0,sizeof(b));   for(i=0;i<n;i++){//cin>>tem;scanf("%d",&tem);b[500000+tem]=1;}for(i=1000000;m>=1;i--){if(b[i]==1){//cout<<i-500000;printf("%d",i-500000);if(m>1)//cout<<" ";putchar(32);else//cout<<endl;putchar(10);m--;}}}return 0;}

           1280代碼:

#include<iostream>using namespace std;int main(){int a[3000],count[10001];bool b[10001];int i,j,m,n;while(cin>>m>>n){for(i=0;i<m;i++)cin>>a[i];memset(b,0,sizeof(b));memset(count,0,sizeof(count));for(i=0;i<m;i++){for(j=i+1;j<m;j++){   b[a[i]+a[j]]=1;   count[a[i]+a[j]]++;}}for(i=10000;n>=1;i--){if(b[i]==1){                while(count[i]--){cout<<i;if(n>1)cout<<" ";elsecout<<endl;n--;if(n<1)break;}}}}return 0;}

             3785代碼:

#include<iostream>using namespace std;void shell_sort(int a[],int m)  //希爾排序,遞增{    int i,j,len,tem;    len=m/2;    while(len>=1)    {        for(i=len;i<m;i++)        {            tem=a[i];            j=i-len;            while(j>=len-1 && a[j]<tem)  //<或>,都是在滿足條件下為tem向前找位置            {                a[j+len]=a[j];                j-=len;            }            a[j+len]=tem;        }        len/=2;    }}int main(){    int m,n,i;    int a[100000];    while(cin>>m>>n,m||n)    {        for(i=0;i<m;i++)            cin>>a[i];        shell_sort(a,m);        n=(m>n)?n:m;        for(i=0;i<n-1;i++)            cout<<a[i]<<" ";        cout<<a[n-1]<<endl;    }    return 0;}

          

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.