蓝桥杯 判断名次

来源:互联网 发布:java执行python脚本 编辑:程序博客网 时间:2024/06/06 03:45
  算法提高 判断名次  
时间限制:1.0s   内存限制:256.0MB
    
问题描述
  某场比赛过后,你想要知道A~E五个人的排名是什么,于是要求他们每个人说了一句话。(经典的开头……-_-!)得了第1名的人23,说了假话;得了第5名的人不好意思,也说了假话;为了使求解问题简单,第3名同样说了假话。(奇数名次说假话)
输入格式
  共5行,各行依次表示A~E说的话。
  每行包含一个形如“A>=3”的名次判断,即一个大写字母+关系运算符+一个数字,不包含空格。
  大写字母A~E,关系运算<、<=、=、>=、>、!=,数字1~5。注意:等于是“=”不是“==”!
输出格式
  可能有多解,请按照字典序输出排名序列,每个解一行
  最后一行输出解的数量
样例输入
A=2
D=5
E>3
A>2
B!=1
样例输出
ACDEB
AECBD
BADCE
BCADE
BDACE
CEADB
CEBDA
7


100分AC代码
<pre name="code" class="cpp">#include<iostream>#include<stdio.h>#include<string>#define N 1000using namespace std;string op(string cor){    if(cor[1]=='=')    {        cor+=cor[2];        cor[1]='!';        cor[2]='=';    }    else if(cor[1]=='!'&&cor[2]=='=')    {        cor[2]=cor[3];        cor[1]='=';    }    else if(cor[1]=='>'&&cor[2]!='=')    {        cor+=cor[2];        cor[1]='<';        cor[2]='=';    }    else if(cor[1]=='>'&&cor[2]=='=')    {        cor[2]=cor[3];        cor[1]='<';    }    else if(cor[1]=='<'&&cor[2]!='=')    {        cor+=cor[2];        cor[1]='>';        cor[2]='=';    }    else if(cor[1]=='<'&&cor[2]=='=')    {        cor[2]=cor[3];        cor[1]='>';    }    return cor;}int main(){    string str,say[5],say1[5],ans[10];    int i,j,a,b,c,d,e,cnt=0,k,x,flag=0,u,v,w,t[2],tr=0,td=0,p=0,an=0;    for(i=0; i<5; i++)        cin>>say[i];    for(i=0; i<5; i++)        say1[i]=say[i];    for(u=0; u<5; u++)        for(v=u+1; v<5; v++)            for(w=v+1; w<5; w++)            {                tr=0;                for(int f=0; f<5; f++)                    if(f!=u&&f!=v&&f!=w)                    {                        t[tr++]=f;                    }                say1[u]=op(say1[u]);                say1[v]=op(say1[v]);                say1[w]=op(say1[w]);                for(a=0; a<5; a++)                {                    for(b=0; b<5; b++)                    {                        for(c=0; c<5; c++)                        {                            for(d=0; d<5; d++)                            {                                for(e=0; e<5; e++)                                {                                    str=('A'+a);                                    str+=('A'+b);                                    str+=('A'+c);                                    str+=('A'+d);                                    str+=('A'+e);                                    if(str[0]!=str[1]&&str[0]!=str[2]&&str[0]!=str[3]&&str[0]!=str[4]&&str[1]!=str[2]&&str[1]!=str[3]                                            &&str[1]!=str[4]&&str[2]!=str[3]&&str[2]!=str[4]&&str[3]!=str[4])                                    {                                        p=0;                                        for(k=0; k<5; k++)                                        {                                            flag=0;                                            if(say1[k][1]=='=')                                            {                                                td=say1[k][2]-'0'-1;                                                if(str[td]!=say1[k][0])                                                    break;                                                p++;                                            }                                            else if(say1[k][1]=='>'&&say1[k][2]!='=')                                            {                                                for(j=say1[k][2]-'0'; j<5; j++)                                                    if(str[j]==say1[k][0])                                                    {                                                        flag=1;                                                    }                                                if(!flag)                                                    break;                                                p++;                                            }                                            else if(say1[k][1]=='>'&&say1[k][2]=='=')                                            {                                                for(j=say1[k][3]-'0'-1; j<5; j++)                                                    if(str[j]==say1[k][0])                                                    {                                                        flag=1;                                                    }                                                if(!flag)                                                    break;                                                p++;                                            }                                            else if(say1[k][1]=='<'&&say1[k][2]!='=')                                            {                                                for(j=0; j<say1[k][2]-'0'-1; j++)                                                    if(str[j]==say1[k][0])                                                    {                                                        flag=1;                                                    }                                                if(!flag)                                                    break;                                                p++;                                            }                                            else if(say1[k][1]=='<'&&say1[k][2]=='=')                                            {                                                for(j=0; j<say1[k][3]-'0'; j++)                                                    if(str[j]==say1[k][0])                                                    {                                                        flag=1;                                                    }                                                if(!flag)                                                    break;                                                p++;                                            }                                            else if(say1[k][1]=='!'&&say1[k][2]=='=')                                            {                                                td=say1[k][3]-'0'-1;                                                if(str[td]==say1[k][0])                                                    break;                                                p++;                                            }                                        }                                        if(((str[1]=='A'+t[0]&&str[3]=='A'+t[1])||(str[1]=='A'+t[1]&&str[3]=='A'+t[0]))&&(p==5))                                        {                                            cnt++;                                            ans[an++]=str;                                            //cout<<str<<endl;                                            x=0;                                            flag=0;                                            break;                                        }                                    }                                }                            }                        }                    }                }                for(i=0; i<5; i++)                    say1[i]=say[i];            }    string tmp;    for(i=0; i<an; i++)    {        for(j=i+1; j<an; j++)        {            if(ans[i]>ans[j])            {                tmp=ans[i];                ans[i]=ans[j];                ans[j]=tmp;            }        }    }    for(i=0; i<an; i++)        cout<<ans[i]<<endl;    cout<<cnt<<endl;    return 0;}




这个题还是写得太暴力了……有个稍微简单易懂的代码,然而只得了60分,有两组数据没过,暂时还没有找出问题。我放在论坛上了,有知道的同学可以指点一下~论坛地址:http://bbs.csdn.net/topics/391897117

测试数据:
input1:
A=2
D=5
E>3
A>2
B!=1

output1:
ACDEB
AECBD
BADCE
BCADE
BDACE
CEADB
CEBDA
7

input2:
C<=3
A=1
B=1
E>=4
D!=2

output2:
AEDBC
BDACE
BEACD
BEDCA
CDBAE
CEBAD
CEDAB
DECAB
8

input3:
E!=4
D<=4
B=1
C!=2
A=3

output3:
BCAED
BCEAD
2

input4:
D>3
E!=3
D>4
B=1
A>3

output4:
BAEDC
CBDEA
CEDBA
DBCEA
DECBA
5

input5:
A>=5
A>4
A=5
A=5
B<=1

output5:
0




1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 男拧有噶坏 男女发现山洞闪金光 进一看兴奋极了 男女发现山洞闪金光进一看兴奋极了 男女警长假扮夫妻 男女蒲典wet123 男女疑因车震冲入河中 男女这里长一寸竟可增寿十年 男人婚前没有这经验抬不起头来 男生猛扇回击老师 男生喜欢女仆装小说 男士去眼袋费用 男童遭飞镖扎左眼 男员工被开除党籍 男子草丛发现异物 捅破后被吓坏了 男子车震被家人堵车内 男子发现山洞闪金光 进一看兴奋极了 男子韩币骗晕劫匪 男子患病体内钢钉 男子靠手机挡子弹 男子拦婚车要钱被打 男子拿祖传宝刀做抵押 知道结果后十分后悔 男子掐脖劫持婴儿 男子杀变性人伴侣 男子深夜按摩猝死 男子生日被闪电击 男子涂鸡血自导绑架案 男子玩浪漫高楼垂降 男子维修管道 竟发现骇人一幕 男子维修管道 这一幕让人头皮发麻 男子寻宝捡旧手提箱 里面东西惊动全城 男子烟瘾发作抢劫 男子岩穴住25年 男子意外获藏宝图 挖出大宝贝 男子雨中殴打怀孕妻子 男子遭雷劈获超能力 男子遭雷劈拥有超能力 男子斩掉蛇头 竟发生如此诡异一幕 男子整容13次整成超人 男子装瞎骗救助 男子坠楼被灯柱穿胸 男子最走心辞职信