C程序的问题

[复制链接]
查看11 | 回复2 | 2010-9-23 16:01:11 | 显示全部楼层 |阅读模式
【问题描述】
国王有一个魔镜,可以把任何接触镜面的东西变成原来的两倍——只是,因为是镜子嘛,增加的那部分是反的。
比如一条项链,我们用AB来表示,不同的字母表示不同颜色的珍珠。
如果把B端接触镜面的话,魔镜会把这条项链变为ABBA。如果再用一端接触的话,则会变成ABBAABBA(假定国王只用项链的某一端接触魔镜)。(这说明A端接触则原样copy!)
给定最终的项链,请编写程序输出国王没使用魔镜之前,最初的项链可能的最小长度。
【输入文件】
文件名:magic.in
文件中只有一个字符串,由大写英文字母组成,表示最终的项链。
【输出文件】
文件名:magic.out
文件中只有一个整数,表示国王没使用魔镜前,最初的项链可能的最小长度。
【样例输入】
ABBAABBA
【样例输出】
2
各位大大请给出代码!

回复

使用道具 举报

千问 | 2010-9-23 16:01:11 | 显示全部楼层
我确认一下:在非偶回文串时(如ABABA),长度为串长;偶回文串时,切割为两个子回文串,再重新计算一个子回文串的串长。一直迭代到子串不是偶回文串为止,是这个意思吧。 -----------------用递归写的,不懂就问我吧,我5点半以前在。#include #include int palindromeLength(char* original){ int i; int length = strlen(original); char aftercut[50]; if (length%2==0) {for (i=0;i<length/2;i++){
回复

使用道具 举报

千问 | 2010-9-23 16:01:11 | 显示全部楼层
判断给定的字符串字母是否为偶数个,如果否,那就是最小长度;如果是,则继续判断是否关于中间位置对称。如果不对称,则是最小长度;如果对称,则取前面一半。将取出的前一半重复上面的操作。思路有了,代码楼主自己写吧,自己练练笔,不要等现成的代码。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行