1. 程式人生 > >HDU 杭電 acm-2093-考試排名

HDU 杭電 acm-2093-考試排名

/************************************************************************

這題廢了一番功夫。。

首先題目沒給出人數,乍一看懵了。參考了網上的程式碼,用 while(scanf("%s",name)!=EOF)來結束人的輸入,鍵盤同時按住ctrl+z,輸入檔案結束符,再回車,計算排名。同時把儲存人的陣列定義的大一點(10000為例);

其次是資料的輸入竟然還有括號,原想用getchar()來接收並檢測是不是括號,但容易出錯,乾脆全部用%s接收成字串,再寫個函式轉化為純數字。

/****************************************************************************************

程式碼如下:

/*************************

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct person{
    char name[11];
    int accepted;
    int punish;
}acmer[10000];

int n,m;//n題目數,m懲罰分 

int cmp(const void *q,const void *w)
{
    person *a=(person*)q,*b=(person*)w;
    
    if(a->accepted!=b->accepted)
        return b->accepted-a->accepted;
    if(a->punish!=b->punish)
        return a->punish-b->punish;
    return strcmp(a->name,b->name);
}

int to_int(char *p)//此函式將字串中的數字轉化為int型資料 
{
    if(*p=='-'||*p=='0')
        return 0;//題目沒做對,不做統計,直接0 
    int punish=0,temp=0;
    while(*p)
    {
        if(*p=='(')
        {
            while(*(++p)!=')')
            {
                temp=temp*10+*p-'0';
            }
            break;
        }
        punish=punish*10+*p-'0';
        p++;
    }
    return punish+temp*m;
}
int main()
{
    char a[12];
    int score,i=0;
    scanf("%d%d",&n,&m);
    while(scanf("%s",acmer[i].name)!=EOF)
    {
        acmer[i].accepted=0;
        acmer[i].punish=0;
        for(int j=0;j<n;j++)
        {
            scanf("%s",a);
            score=to_int(a);
            if(score>0)
            {
                acmer[i].accepted++;
                acmer[i].punish+=score;
            }
        }
        i++;
    }
    
    qsort(acmer,i,sizeof(acmer[0]),cmp);
    for(int j=0;j<i;j++)
    {
        printf("%-10s %2d %4d\n",acmer[j].name,acmer[j].accepted,acmer[j].punish);
    }
    return 0;
}


相關推薦

HDU acm-2093-考試排名

/************************************************************************ 這題廢了一番功夫。。 首先題目沒給出人數,乍一看懵了。參考了網上的程式碼,用 while(scanf("%s",name)!

OJ-- 2093 考試排名

C++程式設計考試使用的實時提交系統,具有即時獲得成績排名的特點。它的功能是怎麼實現的呢? 我們做好了題目的解答,提交之後,要麼“AC”,要麼錯誤,不管怎樣錯法,總是給你記上一筆,表明你曾經有過一次錯誤提交,因而當你一旦提交該題“AC”後,就要與你算一算帳了,總共該題錯誤提交了幾回。雖然你在題數上,大步地躍

題解報告:hdu 2093 考試排名

初始 c++ 讀取 實時 相互 計算 入參 spa 排序規則 題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2093 Problem Description C++編程考試使用的實時提交系統,具有即時獲得成績排名的特點。它的功

ACM hdu 2079 選課時間 (模板)

Problem Description 又到了選課的時間了,xhd看著選課表發呆,為了想讓下一學期好過點,他想知道學n個學分共有多少組合。你來幫幫他吧。(xhd認為一樣學分的課沒區別) Input輸入資料的第一行是一個數據T,表示有T組資料。每組資料的第一行是兩個整數n(1 <= n <

HDU 2093 考試排名 【排序】【模擬】

考試排名Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 14928    Accepted Submission(s

ACM hdu 2152 Fruit 解題報告(母函式)

Problem Description 轉眼到了收穫的季節,由於有TT的專業指導,Lele獲得了大豐收。特別是水果,Lele一共種了N種水果,有蘋果,梨子,香蕉,西瓜……不但味道好吃,樣子更是好看。 於是,很多人們慕名而來,找Lele買水果。 甚至連大名鼎鼎的HDU ACM

HDU 2093 考試排名

說明:這個就是一個簡單的資料處理的題目,建議用STL #include <stdio.h> #include <algorithm> #include <string.h> using namespace std;

ACMHDU 1002 A + B Problem II

題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=1002 題目: Problem Description I have a very simple problem for you. Given two integers A

HDU 2093考試排名(結構體多關鍵字排序+字串處理)

題目 Description C++程式設計考試使用的實時提交系統,具有即時獲得成績排名的特點。它的功能是怎麼實現的呢? 我們做好了題目的解答,提交之後,要麼“AC”,要麼錯誤,不管怎樣錯法,總是給你記上一筆,表明你曾經有過一次錯誤提交,因而當你一

HDU 2093考試排名

C++程式設計考試使用的實時提交系統,具有即時獲得成績排名的特點。它的功能是怎麼實現的呢? 我們做好了題目的解答,提交之後,要麼“AC”,要麼錯誤,不管怎樣錯法,總是給你記上一筆,表明你曾經有過一次錯誤提交,因而當你一旦提交該題“AC”後,就要與你算一算帳了,總共該題錯誤提交了幾回。雖然你在題數上,大步地躍上

hdu 2093 考試排名(sscanf)

模擬題。 直接從教程里拉解析。 因為表格裡的資料格式不統一。有時候有"()",有時候又沒有。而它也不會給我們提示。 這種情況下,就只能它它們統一看作字串來處理了。現在就請出我們的主角sscanf()! sscanf 語法: #include int sscanf( con

HDU 2093 考試排名【結構體排序】

C++程式設計考試使用的實時提交系統,具有即時獲得成績排名的特點。它的功能是怎麼實現的呢? 我們做好了題目的解答,提交之後,要麼“AC”,要麼錯誤,不管怎樣錯法,總是給你記上一筆,表明你曾經有過一次錯誤提交,因而當你一旦提交該題“AC”後,就要與你算一算帳了,總共該題錯誤提交了幾回。雖然你在題數上,大步地躍

ACM hdu 2082 找單詞 解題報告(母函式)

Problem Description 假設有x1個字母A, x2個字母B,..... x26個字母Z,同時假設字母A的價值為1,字母B的價值為2,..... 字母Z的價值為26。那麼,對於給定的字母,可以找到多少價值<=50的單詞呢?單詞的價值就是組成一個單詞的所有

ACM hdu 2079 選課時間 解題報告(母函式)

Problem Description 又到了選課的時間了,xhd看著選課表發呆,為了想讓下一學期好過點,他想知道學n個學分共有多少組合。你來幫幫他吧。(xhd認為一樣學分的課沒區別)Input輸入資料的第一行是一個數據T,表示有T組資料。每組資料的第一行是兩個整數n(1

HDU 2093 (考試排名

C++程式設計考試使用的實時提交系統,具有即時獲得成績排名的特點。它的功能是怎麼實現的呢? 我們做好了題目的解答,提交之後,要麼“AC”,要麼錯誤,不管怎樣錯法,總是給你記上一筆,表明你曾經有過一次錯誤提交,因而當你一旦提交該題“AC”後,就要與你算一算帳了,總共該題錯誤提交了幾回。雖然你在題數上,大步地躍

hdu 2093 考試排名(結構體排序)

對“到檔案結束”理解 程式碼: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; struct node { char nam

HDU 2093 考試排名 (結構體+排序+簡單但麻煩)

考試排名 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi

ACM HDU Train Problem I

Train Problem I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 25008    Accepte

hdu---2093考試排名

C++程式設計考試使用的實時提交系統,具有即時獲得成績排名的特點。它的功能是怎麼實現的呢?我們做好了題目的解答,提交之後,要麼“AC”,要麼錯誤,不管怎樣錯法,總是給你記上一筆,表明你曾經有過一次錯誤提交,因而當你一旦提交該題“AC”後,就要與你算一算帳了,總共該題錯誤提交了幾回。雖然你在題數上,大步地躍上了

ACM C++』HDUOJ | 1415 - Jugs (灌水定理引申)

size 任務 手寫 posit integer another 說我 清空 www.   今天總算開學了,當了班長就是麻煩,明明自己沒買書卻要帶著一波人去領書,那能怎麽辦呢,只能說我善人心腸哈哈哈,不過我腦子裏突然浮起一個念頭,大二還要不要繼續當這個班委呢,既然已經體