高端定制网站是什么,十大免费行情软件推荐,电子商务网站建设与管理的书,android应用开发期末考试题描述 国王有一个魔镜#xff0c;可以把任何接触镜面的东西变成原来的两倍——只是#xff0c;因为是镜子嘛#xff0c;增加的那部分是反的。
比如一条项链#xff0c;我们用AB来表示#xff0c;不同的字母表示不同颜色的珍珠。如果把B端接触镜面的话#xff0c;魔镜会把…描述 国王有一个魔镜可以把任何接触镜面的东西变成原来的两倍——只是因为是镜子嘛增加的那部分是反的。
比如一条项链我们用AB来表示不同的字母表示不同颜色的珍珠。如果把B端接触镜面的话魔镜会把这条项链变为ABBA。如果再用一端接触的话则会变成ABBAABBA假定国王只用项链的某一端接触魔镜。
给定最终的项链请编写程序输出国王没使用魔镜之前最初的项链可能的最小长度。
输入 第一行是一个整数N(N10)表示测试数据的组数 每组测试数据占一行 只有一个字符串长度小于100由大写英文字母组成表示最终的项链。 输出 每组测试数据的输出只有一个整数表示国王没使用魔镜前最初的项链可能的最小长度。 样例输入 2 ABBAABBA A 样例输出 2 1
代码如下
#include stdio.h #include string.h
int hansu(char * , int ); int main() { int n,len; char a[101];//定义一个字符数组 scanf(“%d”, n); getchar();//首先输出n组数据getchar吞掉换行 while(n–) { scanf(“%s”, a);//输入该字符数组 len strlen(a);//len计算出该字符数组的长度 if(len%2 ! 0)//如果该字符数组的长度是奇数的话表示没有使用魔镜对称即原样输出即可 printf(“%d\n”, len); else printf(“%d\n”, hanshu(a, len));//如果是偶数进行hanshu这个函数进一步判断 }
return 0;}
int hanshu(char * a, int len) { int i, j; for(i0; i len; i) { if(a[i] ! a[len-1-i])//hanshu如果说第一个跟它对称的那个最后一个数不一样的话即没有复制 return len;//原样返回 } if((len/2)%2 ! 0)//如果上面一个for循环没有进行那就减半再次进行判断 return len/2;//如果减半后是奇数输出减半后的结果 else { len / 2; return hanshu(a, len);//否则的话接着减半之后再次进行此hanshu这个函数循环 } }