#4505: 多謝說明, 還有一個 sort 問題


wwww (米豆)

學校 : 不指定學校
編號 : 12713
來源 : [175.180.100.52]
最後登入時間 :
2010-11-30 23:05:43
b255. D. 跑跑卡丁車 -- 2009 NPSC 高中組決賽 | From: [175.180.99.143] | 發表日期 : 2010-11-07 01:07

非常感謝回覆

感恩之 

還有一個 sort 問題

我需要的是用 struct 裡面的 score 的值去 sort  

我用 sort(s,n,cmp);    //排序 出現下列錯誤 

 no matching function for call to `sort(snd[((unsigned int)((int)n))], int&, bool (&)(int, int))' 

我的程式如下 :  該如何修正,    ---  多謝

#include <iostream>

#include <cstdlib>

#include <algorithm> 

using namespace std;


struct world

{

      string name;           // 隊名 

      int score;          // 排名時數 

} ; 

    

typedef struct world snd;     // 定義資料型態名稱--排名 

 

 

bool cmp(int ca,int cb){


if(ca>cb)return 0;/*0表示要交換*/


return 1;

}


int main(void){  

       int n;

      while( cin >> n ){

         if ( n==0 ) { break; }

         if ( n<3 || n>100000 ) {break;}

         snd s[n];

         char name;

         int hh=0,mm=0,ss=0,ms=0;

         for(int i=0;i<n;i++){

             scanf("%s %d:%d:%d.%d",&name,&hh,&mm,&ss,&ms);

             s[i].score=hh*3600000+mm*60000+ss*1000+ms;

             s[i].name=name;

         }

             

          sort(s,n,cmp);    //排序   

          cout<<"LIST START"<<endl;

          int k=0;

          k=n/3;

          for(int i=0;i<k;i++){

              cout <<s[i].name<<endl;

          }

          for(int i=k;i<n;i++){

              if ( s[k-1].score == s[i].score ) {

                   cout <<s[i].name<<endl;

              }     

          } 

    cout<<"LIST END"<<endl;


    }     

//system("pause");

return 0;


 

 
#4506: Re:多謝說明, 還有一個 sort 問題


leopan0922 (zz)

學校 : 臺北市立成功高級中學
編號 : 6612
來源 : [140.113.225.106]
最後登入時間 :
2016-08-15 15:44:07
b255. D. 跑跑卡丁車 -- 2009 NPSC 高中組決賽 | From: [219.70.171.51] | 發表日期 : 2010-11-07 08:06

非常感謝回覆

感恩之 

還有一個 sort 問題

我需要的是用 struct 裡面的 score 的值去 sort  

我用 sort(s,n,cmp);    //排序 出現下列錯誤 

 no matching function for call to `sort(snd[((unsigned int)((int)n))], int&, bool (&)(int, int))' 

我的程式如下 :  該如何修正,    ---  多謝

#include

#include

#include  

using namespace std;


struct world

{

      string name;           // 隊名 

      int score;          // 排名時數 

} ; 

    

typedef struct world snd;     // 定義資料型態名稱--排名 

 

 

bool cmp(int ca,int cb){


if(ca>cb)return 0;/*0表示要交換*/


return 1;

}


int main(void){  

       int n;

      while( cin >> n ){

         if ( n==0 ) { break; }

         if ( n<3 || n>100000 ) {break;}

         snd s[n];

         char name;

         int hh=0,mm=0,ss=0,ms=0;

         for(int i=0;i

             scanf("%s %d:%d:%d.%d",&name,&hh,&mm,&ss,&ms);

             s[i].score=hh*3600000+mm*60000+ss*1000+ms;

             s[i].name=name;

         }

             

          sort(s,n,cmp);    //排序   

          cout<<"LIST START"<

          int k=0;

          k=n/3;

          for(int i=0;i

              cout <<

          }

          for(int i=k;i

              if ( s[k-1].score == s[i].score ) {

                   cout <<

              }     

          } 

    cout<<"LIST END"<


    }     

//system("pause");

return 0;


 

我根據你的說法改下

#include <iostream>

#include <cstdlib>

#include <algorithm>

using namespace std;


struct world

{

      string name;           // 隊名

      int score;          // 排名時數

} ;

   

typedef struct world snd;     // 定義資料型態名稱--排名

 

 

bool cmp(snd a,snd b){


if(a.score>b.score)return 0;/*0表示要交換*/


return 1;

}


int main(void){ 

       int n;

      while( cin >> n ){

         if ( n==0 ) { break; }

         if ( n<3 || n>100000 ) {break;}

         snd s[n];

         char name;

         int hh=0,mm=0,ss=0,ms=0;

         for(int i=0;i<n;i++){

             scanf("%s %d:%d:%d.%d",&name,&hh,&mm,&ss,&ms);

             s[i].score=hh*3600000+mm*60000+ss*1000+ms;

             s[i].name=name;

         }

            

          sort(s,s+n,cmp);    //排序  

          cout<<"LIST START"<<endl;

          int k=0;

          k=n/3;

          for(int i=0;i<k;i++){

              cout <<s[i].name<<endl;

          }

          for(int i=k;i<n;i++){

              if ( s[k-1].score == s[i].score ) {

                   cout <<s[i].name<<endl;

              }    

          }

    cout<<"LIST END"<<endl;


    }    

//system("pause");

return 0;


 
ZeroJudge Forum