栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C语言 7-6 魔镜 (不考虑奇偶的做法)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C语言 7-6 魔镜 (不考虑奇偶的做法)

传说魔镜可以把任何接触镜面的东西变成原来的两倍,不过增加的那部分是反的。例如,对于字符串XY,若把Y端接触镜面,则魔镜会把这个字符串变为XYYX;若再用X端接触镜面,则会变成XYYXXYYX。对于一个最终得到的字符串(可能未接触魔镜),请输出没使用魔镜之前,该字符串最初可能的最小长度。

输入格式:

测试数据有多组,处理到文件尾。每组测试输入一个字符串(长度小于100,且由大写英文字母构成)。

输出格式:

对于每组测试数据,在一行上输出一个整数,表示没使用魔镜前,最初字符串可能的最小长度。

输入样例:
XYYXXYYX
XYXX

输出样例:
2
4
#include 
#include 
#include 
void nixu(char *a);

int main()
{
    char a[101], b[101], c[101], *pa; //a是原数组,b用来进行比较,c用来保留a的原型
    int i, n, count;                  //n存放字符串长度,count代表魔镜做了几次
    while(scanf("%s", a) != -1)       //按照提议输入字符串,处理到文件尾
    {
        strcpy(c, a);                 //把a复制给c备用
        strcpy(b, a);                 //把a复制给b比较
        count = 0;                    //给count赋初值
        while(strcmp(a,b) == 0)       //当a和b字符串相等时,循环继续
        {
                n = strlen(a);        //求出字符串长度
                pa = a+n/2;           //找到指针pa从a字符数组中间截断的位置
                strcpy(b, pa);        //把从pa位置以后的字符串复制到b字符数组上
                *pa = '';           //再给a字符数组前半段加上结束标志
                nixu(b);              //调取函数逆序摆放b
                count++;              //计数加一,循环结束count会多加一次
        }
        int q = pow(2,count - 1);     //用减半的次数来算出长度的倍数
        printf("%dn",strlen(c)/q);   //用总长度减去倍数,就得到了最短长度
    }

}
void nixu(char *a)                    //逆序字符数组的函数,之前的题有出现过
{
    int n = strlen(a);
    char *pa, *pb;
    for(pa = a, pb = a+n-1; pa < pb; pa++,pb--)
    {
        char m = *pa;
        *pa = *pb;
        *pb = m;
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/666026.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号