国王的魔镜2

国王的魔镜2

时间限制: 1 Sec 内存限制: 0 MB
[提交][状态][讨论版]
题目描述
国王有一个魔镜,可以把任何接触镜面的东西变成原来的两倍——只是,因为是镜子嘛,增加的那部分是反的。

比如一条项链,我们用AB来表示,不同的字母表示不同颜色的珍珠。如果把B端接触镜面的话,魔镜会把这条项链变为ABBA。如果再用一端接触的话,则会变成ABBAABBA(假定国王只用项链的某一端接触魔镜)。

给定最终的项链,请编写程序输出国王没使用魔镜之前原始项链的长度。以及它经过了多少次的变换。

输入
第一行行是一个整数N(N<=10)表示测试数据的组数) 每组测试数据占一行 只有一个字符串(长度小于100),由大写英文字母组成,表示最终的项链。
输出
每组测试数据的输出包括两个整数,中间用空格隔开。分别表示原始项链的长度以及经过了多少次变换。

样例输入

2
ABBAABBA
A

样例输出

2 2
1 0

网址
题意
思路
代码

#include<stdio.h>                                            //c语言头文件
#include<string.h>                                           //字符函数头文件
int main()
{
	char a[100];                                                 //定义一个字符串a
	int n,i,b=1,t,c;
	scanf("%d",&n);
	while(n--)                                                      //循环n次
	{
		scanf("%s",a);
		t=strlen(a);                                                //计算出字符串的长度
		c=t;                                                           //把字符串的长度赋给c
		if(t%2==0)                                                //判断是否为偶数
		{
			for(i=0;i<t/2;i++)
				if(a[i]!=a[t-1-i])                                   //如果字符串的第一个元素与最后一个元素不相等
					break;                                           //结束循环
				if(i==t/2)                                            //如果i从0循环到t/2
				{
					
					t=t/2;                                             //长度减半
					i=0;
					b++;                                              //记录循环次数
				}
				
				else                                                  //如果长度为奇数
					break;                                           //结束循环
				printf("%d %d\n",c/(2*b),b);
		}
		else
			printf("%d %d\n",t,0);
	}
return 0;
}

运行结果
在这里插入图片描述
总结

猜你喜欢

转载自blog.csdn.net/qq_43730272/article/details/86668890