早教吧作业答案频道 -->其他-->
求个C语言程序设计答案发我邮箱849839606@qq.com回文字符串就是正读和反读都相同的字符串,约定空串不算回文字符串,容易看出单个字符看作字符串都是回文字符串,二个字符形成的字符串
题目详情
求个C语言程序设计答案 发我邮箱849839606@qq.com
回文字符串就是正读和反读都相同的字符串,约定空串不算回文字符串,容易看出单个字符看作字符串都是回文字符串,二个字符形成的字符串仅在二个字符相同时是回文字符串。回文字符串给人一种稳定和谐的感觉,引起了一些研究者的兴趣。他们发现一个任意的字符串通常不是回文字符串,但一定有一些子串是。这里子串理解为按照原有次序字符串中部分字符组成的字符串,例如长为4的字符串abcd, 长为3的子串有二个:abc 和bcd。于是可以定义一个任意字符串的稳定和谐数为它的子串是回文字符串的数目,例如字符串aab,稳定和谐数为4,因为有回文子串4 个:a, a, b, aa;字符串ababa, 稳定和谐数为9, 因为有回文子串9个:a, b, a, b, a, aba, bab, aba, ababa;
提出的问题请你编写程序:(1)输入一个任意字符串,输出它得稳定和谐数。(2)输入一个任意字符串,允许并且只允许修改其中一个字符,使这个字符串能够具有最大的稳定和谐数,输出这个稳定和谐数。例如,输入aab,应输出6,因为修改为aaa后,有回文子串a, a, a, aa, aa, aaa, 这也是aaa的全部子串;又如输入asdfasdf, 应输出12,因为修改为asdsasdf后,有回文子串a, s, d, s, a, s, d, f, sds, sas, asdsa, dsasd; 再如输入abbabab, 应输出15,因为修改为abbbbab后,有回文子串a, b, b, b, b, a, b, bb, bb, bb, bbb, bbb, bab, bbbb, abbbba。(本题为2011年ACM大赛题目。)
提示:(1)容易做一个判断任意字符串是否为回文字符串的函数,对于长n的字符串,其长为s的子串有n-s+1个,长1的子串n个自然计入,再对s从2至n,检查回文子串个数。(2)直接的想法是枚举法,即逐个修改每个字符并计算回文子串个数。一个可以考虑的启发式规则是将出现少的字符修改为出现多的字符。
回文字符串就是正读和反读都相同的字符串,约定空串不算回文字符串,容易看出单个字符看作字符串都是回文字符串,二个字符形成的字符串仅在二个字符相同时是回文字符串。回文字符串给人一种稳定和谐的感觉,引起了一些研究者的兴趣。他们发现一个任意的字符串通常不是回文字符串,但一定有一些子串是。这里子串理解为按照原有次序字符串中部分字符组成的字符串,例如长为4的字符串abcd, 长为3的子串有二个:abc 和bcd。于是可以定义一个任意字符串的稳定和谐数为它的子串是回文字符串的数目,例如字符串aab,稳定和谐数为4,因为有回文子串4 个:a, a, b, aa;字符串ababa, 稳定和谐数为9, 因为有回文子串9个:a, b, a, b, a, aba, bab, aba, ababa;
提出的问题请你编写程序:(1)输入一个任意字符串,输出它得稳定和谐数。(2)输入一个任意字符串,允许并且只允许修改其中一个字符,使这个字符串能够具有最大的稳定和谐数,输出这个稳定和谐数。例如,输入aab,应输出6,因为修改为aaa后,有回文子串a, a, a, aa, aa, aaa, 这也是aaa的全部子串;又如输入asdfasdf, 应输出12,因为修改为asdsasdf后,有回文子串a, s, d, s, a, s, d, f, sds, sas, asdsa, dsasd; 再如输入abbabab, 应输出15,因为修改为abbbbab后,有回文子串a, b, b, b, b, a, b, bb, bb, bb, bbb, bbb, bab, bbbb, abbbba。(本题为2011年ACM大赛题目。)
提示:(1)容易做一个判断任意字符串是否为回文字符串的函数,对于长n的字符串,其长为s的子串有n-s+1个,长1的子串n个自然计入,再对s从2至n,检查回文子串个数。(2)直接的想法是枚举法,即逐个修改每个字符并计算回文子串个数。一个可以考虑的启发式规则是将出现少的字符修改为出现多的字符。
▼优质解答
答案和解析
// 枚举子串 并判定回文
#include
#include
#include
char s[100001],tmp[100001],tcp[100001];
char str[10000][100001];
int main()
{
int x,y,z,i,j,T,len,count,com=0;
scanf("%d",&T);
while(T -- && scanf("%s",s))
{
len = strlen(s);
count = 0;
for(x = len ; x > 0 ; x --)
for(y = 0 ; y <= len - x ; y ++){
for(i = 0 , z = 0 ; z < x ; z ++)
tmp[i++] = s[y+z];
tmp[i++]='\0';
strcpy(tcp,tmp);
strrev(tcp);
if(!strcmp(tcp,tmp))
{
puts(tcp);
strcpy(str[count++],tcp);
}
}
printf("Case #%d:%d\n",++com,count);
}
return 0;
}
#include
#include
#include
char s[100001],tmp[100001],tcp[100001];
char str[10000][100001];
int main()
{
int x,y,z,i,j,T,len,count,com=0;
scanf("%d",&T);
while(T -- && scanf("%s",s))
{
len = strlen(s);
count = 0;
for(x = len ; x > 0 ; x --)
for(y = 0 ; y <= len - x ; y ++){
for(i = 0 , z = 0 ; z < x ; z ++)
tmp[i++] = s[y+z];
tmp[i++]='\0';
strcpy(tcp,tmp);
strrev(tcp);
if(!strcmp(tcp,tmp))
{
puts(tcp);
strcpy(str[count++],tcp);
}
}
printf("Case #%d:%d\n",++com,count);
}
return 0;
}
看了求个C语言程序设计答案发我邮箱...的网友还看了以下:
将自然数按1、2、3……的次序,8个数字为一行无限制的排列,然后……将自然数按1、2、3……的次序 2020-05-15 …
1:三棱锥S-ABC侧棱为L,底面边长为a,写出求此三棱锥S-ABC体积的一个算法2:写出在下面数 2020-05-20 …
含蓄点有深度点的八字成语8个字中带有通就行 2020-06-13 …
字符A、B、C依次进入一个栈,按出栈的先后顺序组成不同的字符串,至多可以组成(8)个不同的字符串. 2020-06-28 …
mfc一个字符8位如何将两两位转化为0-3的整数我知道一个字符是一个字节的,一个字节有8位,现在如 2020-07-13 …
字符序列pascal问题描述从三个元素的集合[A,B,C]中选取元素生成一个N个字符组成的序列,使得 2020-11-07 …
把出生年月组成的8位数与这八位数(还是组成生年月的数字)的乱序组成的新八位数相减,得差再把差的各个数 2020-11-21 …
16张卡片,黑、白各8张,分别写有数字1~8.把它们象扑克牌那样洗过后,如右图那样排成四行.排列规则 2020-12-23 …
有16张卡片,黑白各8张,分别写有数字1~8,把它们像扑克牌那样洗过后,如图那样排成四行,排列规则如 2020-12-23 …
一个两位数,它的两个数位上的数字和是8,而这个数加18后所得的数,其数字顺序与原有的两位数的数字顺序 2021-01-07 …