早教吧作业答案频道 -->其他-->
C++ACM的密码截获问题密码截获TimeLimit:1000MSMemoryLimit:1024KDescription:Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如ABBA,ABA,A,123321等,但是他们有时会在开始或结束时
题目详情
C++ACM的密码截获问题
密码截获
Time Limit:1000MS Memory Limit:1024K
Description:Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如ABBA,ABA,A,123321等,但是他们有时会在开始或结束时加入一些无关的字符以防别国破解.比如进行下列变化ABBA->12ABBA,ABA->ABAKK,123321->51233214 .因为截获的串太长了,而且存在多种可能的情况(abaaab可看作是aba或baaab的加密形式),Cathcer的工作量实在是太大了,他只能向电脑高手求助,你能帮Catcher找出最长的有效密码串吗?Input:测试数据有若干行字符串,包括字母(字母区分大小写),数字,符号.Output:与输入相对应每一行输出一个整数,代表最长有效密码串的长度.Sample Input:ABBA
12ABBA
A
ABAKK
51233214
abaaab
Sample Output:4
4
1
3
6
5
#include
#include
#include
using namespace std;
int main()
{
for(string s;cin>>s;)
{
if(s.length()==1)
cout
密码截获
Time Limit:1000MS Memory Limit:1024K
Description:Catcher是MCA国的情报员,他工作时发现敌国会用一些对称的密码进行通信,比如ABBA,ABA,A,123321等,但是他们有时会在开始或结束时加入一些无关的字符以防别国破解.比如进行下列变化ABBA->12ABBA,ABA->ABAKK,123321->51233214 .因为截获的串太长了,而且存在多种可能的情况(abaaab可看作是aba或baaab的加密形式),Cathcer的工作量实在是太大了,他只能向电脑高手求助,你能帮Catcher找出最长的有效密码串吗?Input:测试数据有若干行字符串,包括字母(字母区分大小写),数字,符号.Output:与输入相对应每一行输出一个整数,代表最长有效密码串的长度.Sample Input:ABBA
12ABBA
A
ABAKK
51233214
abaaab
Sample Output:4
4
1
3
6
5
#include
#include
#include
using namespace std;
int main()
{
for(string s;cin>>s;)
{
if(s.length()==1)
cout
▼优质解答
答案和解析
这道题首先通过循环遍历所有字符串,然后判断字符串是否对称,通过求得所有对称字符串的最大长度,得到答案.
代码如下:
#include
#include
char str[10000]; //存储用户输入的字符
// IsSymmetry函数 判断指定字符串s是否对称,对称则返回1,不对称则返回0,参数n为字符串长度
int IsSymmetry(char* s,int n)
{
int i,j;
for(i = 0,j = n - 1;i < j;i++,j--)
{
if(s[i] != s[j])
return 0;
}
return 1;
}
int main()
{
int i,j;
int max = 1;//存储最大长度,最小为1
while(gets(str))//获取用户输入的字符
{
int len = strlen(str);
max = 1;//最大长度初始化
for(i = 0;i < len;i++)//遍历所有字符串
{
for(j = len - i;j >=2;j--)
{
if(IsSymmetry(str + i,j))//当前字符串是对称的
{
if(j > max) //如果当前对称字符串的长度大于之前找到的最大长度,则更新max的值
{
max = j;
}
break; //由于字符串长度是递减的,所有一旦找到指定字母开头的最长的字符串,
//则可返回
}
}
}
printf("%d\n",max);
}
return 0;
}
代码如下:
#include
#include
char str[10000]; //存储用户输入的字符
// IsSymmetry函数 判断指定字符串s是否对称,对称则返回1,不对称则返回0,参数n为字符串长度
int IsSymmetry(char* s,int n)
{
int i,j;
for(i = 0,j = n - 1;i < j;i++,j--)
{
if(s[i] != s[j])
return 0;
}
return 1;
}
int main()
{
int i,j;
int max = 1;//存储最大长度,最小为1
while(gets(str))//获取用户输入的字符
{
int len = strlen(str);
max = 1;//最大长度初始化
for(i = 0;i < len;i++)//遍历所有字符串
{
for(j = len - i;j >=2;j--)
{
if(IsSymmetry(str + i,j))//当前字符串是对称的
{
if(j > max) //如果当前对称字符串的长度大于之前找到的最大长度,则更新max的值
{
max = j;
}
break; //由于字符串长度是递减的,所有一旦找到指定字母开头的最长的字符串,
//则可返回
}
}
}
printf("%d\n",max);
}
return 0;
}
看了C++ACM的密码截获问题密码...的网友还看了以下:
请大家发表下自己的解法,学过高数的进来看看函数f(x),g(x)在区间a,b上连续可导,且导数均不为 2020-03-31 …
将总长度为400米的 铁丝截成A.B两种铁丝段A种比B种每段长0,5米.如果截40根A种剩下的部分 2020-05-13 …
设集合S={x|-2≤x≤3},P={x|2m≤x<m+1}满足S∩P=P≠∅(Ⅰ)求实数m的取值 2020-05-17 …
a为-8,b为24,已知,m从a向右出发,速度每秒1个单位长度,同时n从b向右出发,速度每秒2个单 2020-07-22 …
大学线性代数,证明任意一个M×N矩阵A,总可以经过初等变换变为标准型.但真心求证明过程.可以截图发 2020-08-02 …
如图,一个三棱镜的截面为等腰直角△ABC,∠A为直角.一细束光线沿此截面所在平面且平行于BC边的方向 2020-10-30 …
下图为M、N两国一定时期内出生率和死亡率曲线图,据图回答下列各题。1.M、N两国属于()A.M发达国 2020-11-11 …
(2014•南阳一模)如图所示,直角三角形ABC为一棱镜的横截面,∠A=30°,BC=L,棱镜材料的 2020-11-12 …
1.将总长为400米的铁丝截成A、B两种长度,A种比B种每根长0.5米,如果截40根A种,剩余部分都 2020-11-20 …
1.若直线2ax-by+2=0(a>0,b>0),被圆x^2+y^2+2x-4y+1=0截得的弦长为 2020-11-24 …