早教吧作业答案频道 -->其他-->
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的密码截获问题密码...的网友还看了以下:
已知A(- 2/k^2-1)B(0.- 2k/k^2-1),其中k≠0且k≠±1,直线l进过点P( 2020-05-15 …
二次函数y=n(n+1)X^2-(2n+1)X+1 ,n=1,2,3.时,其图像在X轴上截得线段长 2020-05-16 …
若a^2+b^2-2c^2=0,则直线ax+by+c=01,若a^2+b^2-2c^2=0,则直线 2020-05-23 …
线路或设备停电检修时,临时接地线应使用( )。A.截面不小于25mm2的多股软铜线B.截面不小于1. 2020-05-28 …
设a1=(1+k,1,1),a2=(1,1+k,1),a3=(1,1,1+k),b=(0,k,k^ 2020-06-12 …
ADF检验,趋势项、截距项、滞后项应该怎么判别?通过时序图能够判别它应该含有截距项,但是经过ADF 2020-07-06 …
一根长方体木料,长120厘米,它的横截面是一个边长5厘米的正方形.从这根木料上每次截下一个棱长为5 2020-07-20 …
抛物线与直线关系如图,o为坐标原点,直线l在x轴和y轴上的截距分别是a和b(a>0,b不等于0), 2020-07-29 …
一根长度为1m的木棍,第一次截去全长的1/2,第二次截去余下的1/3.第三次截去第二次截后余下的1/ 2020-11-24 …
一根长度为1m的木棍,第一次截去全长的1/2,第二次截去余下的1/3.第三次截去第二次截后余下的1/ 2020-11-24 …