PTA 7-274 魔镜

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:若不是则输出最初可能的最小长度,若是则继续将字符串减半再次判断是否回文串

归属知识点:
数组
选择结构

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值