DXCcn @ 2024-11-29 23:35:56
希蒙最近在学习字符串操作,它用如下的规则逐一的构造出新的字符串:
希蒙 就这样产生字符串,直到最后产生的那个字符串长度不小于读入的整数 N 才停止。
通过上面观察,可以发现第 k 个字符串是由:第 k−1 个字符串 + m + (k+2 个 o) + 第 k-1个字符串连接起来的。
现在的问题是:给出一个整数
一个正整数
一个字符,m
或者 o
。
11
m
样例解释:
由题目所知:字符串 S(0) 是 moo, 现在要求第 11 个字符,显然字符串 S(0)不够长;
同样 S(1) 的长度是 10,也不够长;S(2) 的长度是 25,够长了,S(2) 的第 11 个字符是 m,所以答案就输出 m。
#include <iostream>
#include <string>
using namespace std;
int n,sum;
unsigned long long int a[30];
string b[30];
void initializea(){
a[0]=3;
for(int i=1;i<=25;i++){
a[i]=a[i-1]*2+(i+2);
}
}
void initializeb(int x){
b[0]="moo";
for(int i=1;i<=x;i++){
b[i]=b[i-1]+'m';
for(int k=0;k<i+2;k++){
b[i]+='o';
}
b[i]+=b[i-1];
}
}
int main(){
initializea();
cin>>n;
for(int i=0;i<=25;i++){
if(n<=a[i]){
sum=i;
break;
}
}
initializeb(sum);
cout<<b[sum][n-1];
return 0;
}
求大佬帮助。Pls