奶牛 Bessie 最近在学习字符串操作,它用如下的规则逐一的构造出新的字符串: � ( 0 ) = � � � S(0)=moo � ( 1 ) = � ( 0 ) + � + � � � + � ( 0 ) = � � � + � + � � � + � � � = � � � � � � � � � � S(1)=S(0)+m+ooo+S(0)=moo+m+ooo+moo=moomooomoo � ( 2 ) = � ( 1 ) + � + � � � � + � ( 1 ) = � � � � � � � � � � + � + � � � � + � � � � � � � � � � = � � � � � � � � � � � � � � � � � � � � � � � � � S(2)=S(1)+m+oooo+S(1)=moomooomoo+m+oooo+moomooomoo=moomooomoomoooomoomooomoo …… Bessie 就这样产生字符串,直到最后产生的那个字符串长度不小于读入的整数 N 才停止。 通过上面观察,可以发现第 k 个字符串是由:第 k−1 个字符串 + m + (k+2 个 o)+ 第 k−1 个字符串连接起来的。 现在的问题是:给出一个整数 N( 1 ≤ � ≤ 1 0 9 1≤N≤10 9 ),问第 N 个字符是字母 m 还是 o? 输入描述 一个正整数 N。 输出描述 一个字符,m 或者 o。 样例1 输入复制 11 输出 m 提示 样例解释: 由题目所知:字符串 S(0) 是 moo, 现在要求第 11 个字符,显然字符串 S(0) 不够长; 同样 S(1) 的长度是 10,也不够长;S(2) 的长度是 25,够长了,S(2) 的第 11字符是 m,所以答案就输出 m。
时间: 2023-12-18 14:05:20 浏览: 34
根据题目描述,我们可以使用一个循环来逐步构造字符串,直到字符串长度不小于 N。在每一次循环中,我们将当前字符串与 m 连接,然后连接 k+2 个 o,再连接当前字符串。重复这个过程直到字符串长度不小于 N。
下面是一个 C++ 的实现示例:
```cpp
#include <iostream>
#include <string>
char findCharacter(int N) {
std::string currentString = "moo";
int k = 0;
while (currentString.length() < N) {
k++;
currentString = currentString + 'm' + std::string(k + 2, 'o') + currentString;
}
return currentString[N - 1];
}
int main() {
int N;
std::cin >> N;
char result = findCharacter(N);
std::cout << result << std::endl;
return 0;
}
```
通过调用 `findCharacter` 函数来找到第 N 个字符,并将结果输出。以上代码将输入的整数 N 存储在变量中,然后调用 `findCharacter` 函数来计算结果,并输出结果。
希望对你有所帮助!如果还有其他问题,请随时提问。
相关问题
请在UVA/SPOJ/atcoder/codeforces题库中查找原题:非混淆对话的兴奋水平是奶牛双重发送的次数,即S中子串BB或EE出现的次数。您想找到原始消息的兴奋水平,但您不知道哪些是Bessie / Elsie发送的Farmer John的消息。在所有可能性上,输出S的所有可能兴奋水平。
题目描述
给定一个字符串s,它由两个字符串组成,由Bessie和Elsie发送Farmer John的消息。您不知道哪个子字符串来自哪个奶牛。请计算s中子串BB或EE的出现次数,这是非混淆对话的兴奋水平。在所有可能性上,输出S的所有可能兴奋水平。
输入格式
第一行包含一个字符串s,长度为偶数,其中只包含字符B或E。
输出格式
每行输出一个可能的兴奋水平。兴奋水平是s中子串BB或EE的出现次数。
数据范围
s的长度不超过2000。
输入样例:
BEBEBE
输出样例:
0
1
2
抽象类Mammal有纯虚函数graze()。Mammal类派生出Cow类和Sheep类, Cow类扩展数据成员名称(字符串),Sheep类扩展数据成员名称(字符串)。声明一个Mammal类的对象,通过此对象调用graze函数。
抽象类Mammal的定义如下:
```cpp
class Mammal {
public:
virtual void graze() = 0;
};
```
Mammal类派生出Cow类和Sheep类,分别扩展了数据成员name。
```cpp
class Cow : public Mammal {
private:
std::string name;
public:
Cow(const std::string& cowName) : name(cowName) {}
void graze() override {
std::cout << "Cow " << name << " is grazing." << std::endl;
}
};
class Sheep : public Mammal {
private:
std::string name;
public:
Sheep(const std::string& sheepName) : name(sheepName) {}
void graze() override {
std::cout << "Sheep " << name << " is grazing." << std::endl;
}
};
```
声明一个Mammal类的对象并调用graze函数的代码示例:
```cpp
int main() {
Mammal* mammal = new Cow("Bessie");
mammal->graze();
delete mammal;
mammal = new Sheep("Dolly");
mammal->graze();
delete mammal;
return 0;
}
```
这样就可以创建一个Mammal类的对象,并通过该对象调用graze函数。注意在使用完对象后记得释放内存,以防止内存泄漏。