查看: 1526|回復: 2
打印 上一主題 下一主題

寒訓 01/29 基礎班 範例代碼

[複製鏈接]
  • TA的每日心情
    哭哭
    2015-5-8 16:37
  • 簽到天數: 13 天

    [LV.3]偶爾看看II

    6

    主題

    22

    帖子

    101

    積分

    高一新生

    Rank: 2

    積分
    101
    跳轉到指定樓層
    樓主
    發表於 2015-1-29 16:51:50 | 顯示全部樓層 回帖獎勵 |倒序瀏覽 |閱讀模式

    趕快加入我們來參與討論吧!

    您需要 登錄 才可以下載或查看,沒有帳號?加入我們

    x
    本帖最後由 domen111 於 2015-1-29 17:01 編輯

    [C++] 純文本查看 復制代碼
    #include <stdio.h>
    #include <algorithm>
    using std::sort;
    
    
    /*using structure*/
    struct BOOK{
            char author[200];
            char name[200];
            int year;
    };
    
    BOOK mybook[100];
    int rank[128];
    
    void init_rank(void){
            char s[29] = " .XOBCDAFGHUJKLMNIPQRSTEVWYZ";
            for(int i=0;i<28;++i){
                    rank[s[i]] = i;
                    if( s[i] >= 'A' && s[i] <= 'Z' )
                            rank[s[i]-'A'+'a'] = i;
            }
            rank[0] = -1;
    }
    int XDrz;
    
    bool string_cmp(char s1[], char s2[]){
            for(int i=0;s1[i]!=0 || s2[i]!=0;++i){
                    if( rank[s1[i]] < rank[s2[i]] )
                            return true;
                    else if( rank[s1[i]] > rank[s2[i]] )
                            return false;
            }
            return false;                
    }
    
    bool cmp(BOOK x, BOOK y){
            if( string_cmp(x.author, y.author) )
                    return true;
            else if( string_cmp(y.author, x.author) )
                    return false;
            if( x.year < y.year ) return true;
            else if( x.year > y.year ) return false;
            if( string_cmp(x.name, y.name) )
                    return true;
            else 
                    return false;        
    }
    
    int main(){
            init_rank();
            
            int n;
            char buf[30+100+4+10];
            
            gets(buf);
            sscanf( buf, "%d", &n);
                    
            for(int i=0;i<n;++i){
                    gets(buf);
                    int len = 0;
                    int j;
                    for(j=0;buf[j]!=',';++j)
                            mybook[i].author[len++] = buf[j];
                    j += 2;
                    len = 0;
                    for(;buf[j]!='(';++j)
                            mybook[i].name[len++] = buf[j];
                    j += 1;
                    char number[5];
                    for(int k=0;k<4;++k)
                            number[k] = buf[j+k];
                    number[4] = 0;
                    sscanf( number, "%d", &mybook[i].year);
            }
            sort( mybook, mybook+n, cmp);
            
            for(int i=0;i<n;++i){
                    printf("%s, %s(%d)\n", mybook[i].author, mybook[i].name, mybook[i].year);
            }
            
            return 0;
    }
    


    Zerojudge b240
    回復

    使用道具 檢舉

    您需要登錄後才可以回帖 登入 | 加入我們

    本版積分規則

    快速回覆 返回頂部 返回列表