0000000

题目:竞选时,要求选民在n个候选人中选择,n个人的名字为 A,B,C,D……连续n个大写字母,如果选择n个人名字之外的人员,则为废票。  统计时以输入’#’为结束标记。请按候选人的得票数目从大到小顺序输出候选人的名字及得票情况。Time Limit Exceeded#include<iostream>#include<algorithm>using namespace std;int n,c;char na[233];struct ren{    char name;    int sum;}ren['a'];void init(){    cin>>n;    for(char i='A';i<='A'+n;i++)    {        ren[i].name=i;    }    for(int i=1;;i++)    {        cin>>na[i];        c++;        if(na[i]=='#')            break;    }}void work(){    for(int i=1;i<c;i++)    {        for(char j='A';j<='A'+n;j++)        {            if(na[i]==j)            {                ren[j].sum=ren[j].sum+1;                break;            }        }    }    for(char i='A';i<'A'+c-1;i++)    {        for(char j=i+1;j<'A'+c;j++)        {            if(ren[i].sum<ren[j].sum)                swap(ren[i],ren[j]);        }    }}void print(){    for(int i='A';i<'A'+n;i++)    {        cout<<ren[i].name<<" "<<ren[i].sum<<endl;    }}int main(){    init();    work();    print();    return 0;}正解:#include<iostream>#include<algorithm>using namespace std;int n,c;char na[2333];struct ren{    char name;    int sum;}ren['a'];void init(){    cin>>n;    for(char i='A';i<'A'+n;i++)    {        ren[i].name=i;    }    for(int i=1;;i++)    {        cin>>na[i];        c++;        if(na[i]=='#')            break;    }}void work(){    for(int i=1;i<c;i++)    {		if(na[i]>'Z')			break;        for(char j='A';j<'A'+n;j++)        {            if(na[i]==j)            {                ren[j].sum=ren[j].sum+1;                break;            }        }    }    for(char i='A';i<'A'+n;i++)    {        for(char j=i+1;j<='A'+n;j++)        {            if((ren[i].sum<ren[j].sum)||((ren[i].sum==ren[j].sum)&&(ren[i].name>ren[j].name)))                swap(ren[i],ren[j]);        }    }}void print(){    for(int i='A';i<'A'+n;i++)    {        cout<<ren[i].name<<":"<<ren[i].sum<<endl;    }}int main(){    init();    work();    print();    return 0;}
原文地址:https://www.cnblogs.com/zyker/p/5879210.html