📅  最后修改于: 2023-12-03 15:28:47.743000             🧑  作者: Mango
本题是第五道题目,属于清华大学《计算机程序设计基础》1997级门|门系列考试题,是一道考验程序员问题解决能力的编程练习。本题需要使用C\C++完成,需要掌握基本的输入输出、字符串处理、循环等语法知识。
给定一个由字符'0'和'1'组成的字符串,你的任务是判断它能否分成长度为x和y的两个非空子串,使得这两个子串完全相同。换句话说,就是在字符串中找到两个不同的起点,这两个起点到字符串末尾都一样长,并且这两个起点之间的距离等于x和y。
输入文件只有一行,包含一个由字符'0'和'1'组成的字符串,长度在2和10^5之间。
对于每组测试数据,输出一行,如果字符串可以分成符合条件的两个子串,输出"YES",否则输出"NO"。
10011001
YES
我们可以枚举x和y的长度,然后遍历整个字符串,检查是否存在相等的两个子字符串。具体实现时,我们可以使用字符串的substr()函数来获得从指定位置开始的子字符串,然后比较这两个子字符串是否相等。
#include <iostream>
#include <string>
using namespace std;
int main() {
string s;
cin >> s;
int n = s.size();
bool flag = false;
for (int i = 1; i < n; i++) {
if (n % i != 0) continue; // 保证能够整除
string substr1 = s.substr(0, i), substr2 = s.substr(i, i);
if (substr1 == substr2) {
flag = true;
break;
}
}
if (flag) {
cout << "YES" << endl;
} else {
cout << "NO" << endl;
}
return 0;
}
本题考察了程序员的字符串处理能力和循环逻辑,需要注意的是循环的边界条件和检查整除的操作。掌握了本题的解题思路,可以极大的提高我们的编程能力。