1. 越越的交通系统
题目描述:分别用大写英文字母A,B,c,…Z表示这26个路口,并按如下的规则派出这些机器人到交通路口协助指挥交通:
1、每次派出两名机器人。
2、当两名机器人的名字中存在一个相同的字母时,这两名机器人便到对应的交通路口指挥交通;有多个字母相同时,两名机器人需要按字母的字典顺序到这些路口巡逻。
3、当两名机器人的名字中不存在相同的字母时,交警部门的派出指令无效(wuxiao)。
【输入】
第一行:输入第一个机器人的名字(长度不超过250);
第二行:输入第二个机器人的名字(长度不超过250)。
【输出】
1、当不能排除机器人时,在第一行输出“WuXiao”.
2、当两名机器人在路口上指挥交通时,在第一行输出“ZhiHui”,在第二行输出路口编号。
3、当两名机器人在路口上巡逻时,在第一行输出“XunLuo”,第二行输出巡逻的路口数,第三行输出巡逻线路。
【输入输出样例1】
traffic.in traffic.out
OPEN XunLuo
CLOSE 2
E-O
【输入输出样例2】
traffic.in traffic.out
EPSON XunLuo
SENPUM 4
E-N-P-S
分析:因为机器人的名字不长,所以可以依次枚举来判断,不会超时。然后只要再进行判断和输出即可,代码如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
string a,b;
char d[100000],k;
int s=0,sa,sb;
cin>>a;
cin>>b;
sa=a.size();
sb=b.size();
for(int i=0;i<=sa-1;i++)
for(int j=0;j<=sb-1;j++)
{
if((int)a[i]==(int)b[j])
{
s++;
d[s]=b[j];
}
}
for(int i=1;i<=s-1;i++)
for(int j=i+1;j<=s;j++)
{
if(d[i]>d[j])
{
k=d[i];
d[i]=d[j];
d[j]=k;
}
}
if(s==0)
cout<<"WuXiao"<<endl;
else if(s==1)
{
cout<<"ZhiHui"<<endl;
cout<<d[s]<<endl;
}
else
if(s>1)
{
cout<<"XLuo"<<endl;
cout<<s<<endl;
sort(d+1-65,d+s-65);
for(int i=1;i<=s-1;i++)
if(d[i]!=0)
cout<<d[i]<<'-';
cout<<d[s]<<endl;
}
return 0;
}
但这个代码只得了80分,如果将样例改为:
APPLE
APDU
则输出为
XLuo
3
A-P-P
问题也很显而易见了,是因为没有去重(心情咸鱼)。改进后AC,代码为:
#include<bits/stdc++.h>
using namespace std;
int main()
{
string a,b;
bool c['a']={};
char d[10001];
int sum=0,k=0,e;
cin>>a>>b;
for(int i=0;i<a.size();i++)
{
e=b.find(a[i]);
if(e>-1) c[a[i]]=1;
}
for(char i='A';i<='Z';i++)
if(c[i]==1) sum++;
if(sum==0)
cout<<"WuXiao"<<endl;
else if(sum==1)
{
cout<<"ZhiHui"<<endl;
for(char i='A';i<='Z';i++)
if(c[i]==1)
cout<<i<<endl;
}
else
{
cout<<"XLuo"<<endl;
cout<<sum<<endl;
for(char i='A';i<='Z';i++)
if(c[i]==1)
{
k++;
d[k]=i;
if(d[k-1]!=0)
cout<<d[k-1]<<'-';
}
cout<<d[k]<<endl;
}
return 0;
}
而且,用这种方法做,也减少了很多不必要的循环,减少了时间。
2. 久知的加密工作
题目描述:加密的部分是一串小写英文字母,加密的规则是这样的:要是连续出现相同的字母,则把他们替换成这个字母的大写形式,后面紧跟相同字母的个数,并把它之前跟之后的两端字符串调换,例如出现bcmatchingaef,则字符串变成:efA6bc。然后重新扫描字符串,直到没有出现相同小写字母为止。
【输入】
原始字符串(长度不大于250)。
【输出】
新的字符串。
【输入输出样例1】
password.in | password.out |
bcmatchingaef | efA6bc |
【输入输出样例2】
password.in | password.out |
cmmmcefffg | gM3cF3ce |
样例2解释:cM3cefffg——cefffgM3c——ceF3gM3c——gM3cF3ce
分析:这题可以用链表来完成,但,无奈的是,我不会啊~但,思路是这样的,将这串字符串的每一个字符与后面的字符进行比较,如有重复,则将小写字母改为大写,前后交换,再进行判断,直到不再有重复的小写字母,输出。(其实就是道强模拟QAQ)
C++的字符操作与Pascal有很大差异,很难受。尤其是滚字符串时清空处理(可能是有函数的,but我不知道啊awa)
(本题不附代码)