C语言 7

编程入门 行业动态 更新时间:2024-10-26 17:27:16

C<a href=https://www.elefans.com/category/jswz/34/1770116.html style=语言 7"/>

C语言 7

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

输入格式:

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

输出格式:

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

输入样例:

XYYXXYYX
XYXX

输出样例:

2
4
#include <stdio.h>
#include <string.h>
#include <math.h>
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 = '\0';           //再给a字符数组前半段加上结束标志nixu(b);              //调取函数逆序摆放bcount++;              //计数加一,循环结束count会多加一次}int q = pow(2,count - 1);     //用减半的次数来算出长度的倍数printf("%d\n",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;}
}

更多推荐

C语言 7

本文发布于:2024-03-10 02:37:39,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1726795.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:语言

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!