c语言教程需要牢记的是哪些有没有人给我发个总纲邮箱是

下载作业帮安装包
扫二维码下载作业帮
1.75亿学生的选择
求个C语言程序设计答案 发我邮箱回文字符串就是正读和反读都相同的字符串,约定空串不算回文字符串,容易看出单个字符看作字符串都是回文字符串,二个字符形成的字符串仅在二个字符相同时是回文字符串。回文字符串给人一种稳定和谐的感觉,引起了一些研究者的兴趣。他们发现一个任意的字符串通常不是回文字符串,但一定有一些子串是。这里子串理解为按照原有次序字符串中部分字符组成的字符串,例如长为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, 再如输入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#includechar s[100001],tmp[100001],tcp[100001];char str[1];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 = x > 0 ; x --)
for(y = 0 ; y <= len - y ++){
for(i = 0 , z = 0 ; z < 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语言教程 的文章

 

随机推荐