蓝桥杯 判断名次
来源:互联网 发布: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>=3”的名次判断,即一个大写字母+关系运算符+一个数字,不包含空格。
大写字母A~E,关系运算<、<=、=、>=、>、!=,数字1~5。注意:等于是“=”不是“==”!
输出格式
可能有多解,请按照字典序输出排名序列,每个解一行
最后一行输出解的数量
最后一行输出解的数量
样例输入
A=2
D=5
E>3
A>2
B!=1
D=5
E>3
A>2
B!=1
样例输出
ACDEB
AECBD
BADCE
BCADE
BDACE
CEADB
CEBDA
7
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
D=5
E>3
A>2
B!=1
output1:
ACDEB
AECBD
BADCE
BCADE
BDACE
CEADB
CEBDA
7
AECBD
BADCE
BCADE
BDACE
CEADB
CEBDA
7
input2:
C<=3
A=1
B=1
E>=4
D!=2
A=1
B=1
E>=4
D!=2
output2:
AEDBC
BDACE
BEACD
BEDCA
CDBAE
CEBAD
CEDAB
DECAB
8
BDACE
BEACD
BEDCA
CDBAE
CEBAD
CEDAB
DECAB
8
input3:
E!=4
D<=4
B=1
C!=2
A=3
D<=4
B=1
C!=2
A=3
output3:
BCAED
BCEAD
2
BCEAD
2
input4:
D>3
E!=3
D>4
B=1
A>3
D>4
B=1
A>3
output4:
BAEDC
CBDEA
CEDBA
DBCEA
DECBA
5
CBDEA
CEDBA
DBCEA
DECBA
5
input5:
A>=5
A>4
A=5
A=5
B<=1
A>4
A=5
A=5
B<=1
output5:
0
1 0
- 蓝桥杯 判断名次
- 蓝桥杯_算法提高_判断名次
- C++ 蓝桥杯OJ题目 判断名次
- 【C++】判断名次
- 算法提高 判断名次
- ADV-141-判断名次
- 用C写出一个程序,判断五位选手的名次
- C语言解决现实生活的问题1——判断比赛名次
- 名次排序
- 名次简介
- 计算名次元素在队列中的名次
- 按照分数进行名次计算、名次排序
- 生成名次的SQL
- 用SQL计算名次
- 计算名次排序
- EA常用名次解释
- 软件术语及名次
- 确定比赛名次
- 学习计划
- leetcode -- Best Time to Buy and Sell Stock with Cooldown -- 不理解
- 计算机领域当前的主流技术及其社会需求调查报告
- 30分钟学会正则表达式
- Java工程师成神之路
- 蓝桥杯 判断名次
- 开发 Eclipse 插件
- 34 Identify two situations in which you can use Data Recovery Advisor for recovery. (Choose two.) A.
- iOS7 edgesForExtendedLayout
- oracle 删除外键约束 禁用约束 启用约束
- 怎么区分iPhone手机各个版本的电池
- ruby基础语法
- android studio 导入eclipse项目
- 80,构造方法之初始化