魔王的魔镜
https://www.luogu.com.cn/problem/P2799
题意
给定最终的项链,请编写程序输出国王没使用魔镜之前,最初的项链可能的最小长度。
思路
- 递归判断项链长度的奇偶
- 奇数:直接输出
- 偶数:从两边向中间查找,如果有不一样的就输出并返回
坑点
算法一:递归,回文
实现步骤
- 字符a[]储存原始的排列顺序
- 字符t长度为len进行递归
- 定义r判断其奇偶并进行递归循环
代码
#include<bits/stdc++.h>//万能头文件
using namespace std;
char a[1000010];//利用a来进行存储原始的排列顺序。
int ans=0;//分解的次数。
void fn(int r)//定义函数r递归
int mid=r/2;//进行分解,对半
if(r%2==1){//如果分解后发现是奇数则不能再分解直接输出并返回
cout<<r;
return;
}
else{//如果r为偶数
for(int i=0,j=r-1;i<mid;i++,j--){
//从两边向中间查找
if(a[i]!=a[j]){//并进行比较
cout<<r;
return;
//发现如果有不同则输出并返回
}
}
}
ans++;//计数
fn(mid);//递归操作,再判断1~mid是否可以再分解
}
int main()
{
gets(a);
char t;
int len=strlen(a);
fn(len);
}