1.越越的交通指挥系统
(traffic.pas/c/cpp)
【问题描述】
2027年,越越从北大毕业,想为家乡诸暨做点贡献,越越的家乡诸暨市有很多交通路口,其中有26个交通路口在上下班高峰期总是堵车,严重影响市民的出行。于是交通管理部门研制了一批机器人交通警察,用它们来专门指挥这26个交通路口,但需要一个自动化指挥系统来指挥机器人的运作。这个任务交给了越越,越越的设计如下。
分别用大写英文字母A,B,c,…Z表示这26个路口,并按如下的规则派出这些机器人到交通路口协助指挥交通:
1、每次派出两名机器人。
2、当两名机器人的名字中存在一个相同的字母时,这两名机器人便到对应的交通路口指挥交通;有多个字母相同时,两名机器人需要按字母的字典顺序到这些路口巡逻。
3、当两名机器人的名字中不存在相同的字母时,交警部门的派出指令无效(wuxiao)。
假设这些机器人的名字全由大写字母组成,请你编一个程序,帮越越完成这个交通指挥系统。
【输入】
第一行:输入第一个机器人的名字(长度不超过250);
第二行:输入第二个机器人的名字(长度不超过250)。
【输出】
1、当不能排除机器人时,在第一行输出“WuXiao”.
2、当两名机器人在路口上指挥交通时,在第一行输出“ZhiHui”,在第二行输出路口编号。
3、当两名机器人在路口上巡逻时,在第一行输出“XunLuo”,第二行输出巡逻的路口数,第三行输出巡逻线路。
解析:
这题真的是让我吐血三升,本来应该可以拿100,结果因为种种原因,只拿20(晕晕晕晕晕晕晕晕晕)。
我首先把机器人名字存到两个字符串里,然后把里面的字母用循环累加近两个数组,代码实现如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{//包子皮不用说
string s1,s2;
int i,j,k,l1,l2,s=0,a[27]={},b[27]={};//变量
cin>>s1>>s2;
l1=s1.length(); l2=s2.length();//测长
for(i=0;i<=l1;i++) a[int(s1[i]-'A')+1]++;
for(i=0;i<=l2;i++) b[int(s2[i]-'A')+1]=1#include<bits/stdc++.h>
using namespace std;
int main()
{
string s1,s2;
int i,j,k,l1,l2,s=0,a[27]={},b[27]={};
cin>>s1>>s2;
l1=s1.length(); l2=s2.length();
for(i=0;i<=l1;i++) a[int(s1[i]-'A')+1]++;
for(i=0;i<=l2;i++) b[int(s2[i]-'A')+1]++;//分别存入累加
结果就错了,应该“=1”:
for(i=0;i<=l1;i++) a[int(s1[i]-'A')+1]=1;
for(i=0;i<=l2;i++) b[int(s2[i]-'A')+1]=1;
然后记录a+b=2的数量,并到着记录最后一个a+b=2的数量,代码实现如下:
for(i=1;i<=26;i++) if(a[i]+b[i]==2) s++;
for(i=26;i>=1;i--)
if(a[i]+b[i]==2)
{
k=i;
break;
}
最后进行判断s的三种不同情况并分别输出:
if(s==0) cout<<"WuXiao";
if(s==1) cout<<"ZhiHui"<<endl<<char(k+'A'-1);
if(s>1)
{
cout<<"XLuo"<<endl<<s<<endl;
for(i=1;i<=k-1;i++)
if(a[i]+b[i]==2) cout<<char(i+'A'-1)<<'-';
cout<<char(k+'A'-1);
}
}
结果因为XLuo打成Xluo八十分没了,苍天啊!!!
最后代码如下:
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s1,s2;
int i,j,k,l1,l2,s=0,a[27]={},b[27]={};
cin>>s1>>s2;
l1=s1.length(); l2=s2.length();
for(i=0;i<=l1;i++) a[int(s1[i]-'A')+1]=1;
for(i=0;i<=l2;i++) b[int(s2[i]-'A')+1]=1;
for(i=1;i<=26;i++) if(a[i]+b[i]==2) s++;
for(i=26;i>=1;i--)
if(a[i]+b[i]==2)
{
k=i;
break;
}
if(s==0) cout<<"WuXiao";
if(s==1) cout<<"ZhiHui"<<endl<<char(k+'A'-1);
if(s>1)
{
cout<<"XLuo"<<endl<<s<<endl;
for(i=1;i<=k-1;i++)
if(a[i]+b[i]==2) cout<<char(i+'A'-1)<<'-';
cout<<char(k+'A'-1);
}
}
2.久知的加密工作
(password.pas/c/cpp)
【问题描述】
2027年,从清华毕业的久知找了一份为一些文件的某些部分加密的工作,加密的部分是一串小写英文字母,加密的规则是这样的:要是连续出现相同的字母,则把他们替换成这个字母的大写形式,后面紧跟相同字母的个数,并把它之前跟之后的两端字符串调换,例如出现bcmatchingaef,则字符串变成:efA6bc。然后重新扫描字符串,直到没有出现相同小写字母为止。
【输入】
原始字符串(长度不大于250)。
【输出】
新的字符串。
【输入输出样例1】
password.in | password.out |
bcmatchingaef | efA6bc |
【输入输出样例2】
password.in | password.out |
cmmmcefffg | gM3cF3ce |
样例2解释:cM3cefffg——cefffgM3c——ceF3gM3c——gM3cF3ce
分析:这题可以用链表来完成,无奈的是我没学过,这题大概是这样做的:将这串字符串的每一个字符与后面的字符进行比较,如果重复,则将小写字母改为大写,前后交换,再进行判断,直到不再有重复的小写字母,然后输出。(其实就是道强模拟。。。)
C++的许多操作与Pascal有很大差异,非常的难受。Pascal里很多函数在c++里都用不了
。
(由于本蒟蒻太懒,不想找AC代码,如有需要,请自行查找)