PTA 7-274 魔镜
分数 10
作者 usx程序设计类课程组
单位 绍兴文理学院
传说魔镜可以把任何接触镜面的东西变成原来的两倍,不过增加的那部分是反的。例如,对于字符串XY,若把Y端接触镜面,则魔镜会把这个字符串变为XYYX;若再用X端接触镜面,则会变成XYYXXYYX。对于一个最终得到的字符串(可能未接触魔镜),请输出没使用魔镜之前,该字符串最初可能的最小长度。
输入格式:
测试数据有多组,处理到文件尾。每组测试输入一个字符串(长度小于100,且由大写英文字母构成)。
输出格式:
对于每组测试数据,在一行上输出一个整数,表示没使用魔镜前,最初字符串可能的最小长度。
输入样例:
XYYXXYYX
XYXX
输出样例:
2
4
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include <stdio.h>
#include <string.h>
int main(){
char chars[500];
int len;
while(~scanf("%s", &chars)){ //测试组处理到文件尾
len = strlen(chars); //字符串长度
there:if(len%2==1){ //若字符串为奇数
printf("%d\n", len);
continue;
}
for(int i = 0; i < len/2; i++){ //循环字符串的一半
if(chars[i] != chars[len-1-i]){ //若不为回文串
printf("%d\n", len); //输出最初可能的最小长度
break;
}else{ //若是回文串,则继续将字符串减半
if(i == len/2-1){
len /= 2;
goto there; //跳转
}
}
}
}
return 0;
}
解题思路:
step1:求出输入字符串的长度
step2:判断是否回文串
step3:若不是则输出最初可能的最小长度,若是则继续将字符串减半再次判断是否回文串
归属知识点:
数组
选择结构
2262

被折叠的 条评论
为什么被折叠?



