早教吧作业答案频道 -->其他-->
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的密码截获问题密码...的网友还看了以下:
名义利率与实际利率换算公式:①i=(1+i/r)^r-1②实际利率=名义利率-通货膨胀率名义利率与实 2020-03-31 …
设A为n阶矩阵,证明:R(A+I)+R(A-I)>=n已知R(A)=R(kA),k≠0;R(A+B 2020-05-14 …
在公式E=I(R+r/n)中,已知E,I,R,r,求E≠IR,求n在公式E=I(R+r/n)中,已 2020-05-23 …
A.σ(i+j)θr (R×S)B.σ(i+r)θj (R×S)C.σiθ(r+j) (R×S)D. 2020-05-26 …
导体中的电流I和导体两端的电压U成正比和导体的电阻R成反比即I=U/RR=U/IU=I/R导体的电 2020-06-02 …
P=U²/R跟P=I²R的区别我知道一个用于并联一个用于串联但在判断两个灯泡一个220V100W一 2020-06-03 …
对于纯电阻电路:已知:I、U,求:R=P=已知:R、U,求:I=P=已知:I、R,求:U=P=已知 2020-06-12 …
(1)I=U/R(2)W=I²RT(3)W=U²T/R(4)W=UIT(5)W=PT(6)P=UI 2020-07-18 …
物理问题我们学过电热器的电阻丝的电阻越大产热越多可是根据焦耳定律Q=I*I*R*t得到Q=[U*U* 2020-11-03 …
(e)(a)(r)thush(e)(r)sh(i)(r)tl(e)(a)(r)ncol(o)(u)( 2020-11-27 …