HHUOJ_1352: 幂字符串
题目描述
给你一个字符串,请你判断将此字符串转化成a^n形式的最大的n是多少。
例如:abcd=(abcd)^1,则n=1;
aaaa=a^4,则n=4;
ababab=(ab)^3,则n=3。
输入
输入包含多组测试数据。每组输入为一个字符串,长度不超过100,其中不包含空格等空白符。当输入为一个“.”时,输入结束。
输出
对于每组输入,输出将此字符串转化成a^n形式的最大的n。
样例输入
abcd
aaaa
ababab
.
样例输出
1
4
3
思路
最近老是栽到一些特殊情况…如果这道题你试了很多数据提交后还是不对,一定要仔细审题啊!!!
我在写退出循环语句的时候是
if(s[0] == '.'){
break;
}
之前刷题时写退出语句经常用第一个第一个字符去判断…可是这道题说的每组输入为一个字符串,并没有像样例给的都是英文啊!所以’. ‘也有可能是输入的一部分,输入数据很有可能是
....
.2.2
.a..a..a.
输出应该是
4
2
3
这是坑爹呢啊!!!以后还是老老实实strcmp()吧! \捂脸哭
代码
#include <iostream>
#include <cstring>
using namespace std;
int main(){
char s[110];
int len = 0;
int cnt = 1;
while(cin>>s){
if(!strcmp(s, ".")){ //注意啊!!!不能s[0] == '.'
break;
}
len = strlen(s);
for(int i=len; i>=1; i--){
if(len % i == 0){//说明原串是由 len/i 个子串合并的
int j = 0;
for(j=i; j<len; j++){
if(s[j]!=s[j%i]){//匹配失败
break;
}
}
if(j>=len){//完成上述循环,未出现匹配失败的情况,即匹配成功
cnt = len/i;
}
}
}
cout<<cnt<<endl;
}
return 0;
}