题目名称:
字符串是否由子串拼接
题目描述:
给出一个非空的字符串,判断这个字符串是否是由它的一个子串进行多次首尾拼接构成的。
例如,"abcabcabc"满足条件,因为它是由"abc"首尾拼接而成的,而"abcab"则不满足条件。
输入描述:
非空字符串
输出描述:
如果字符串满足上述条件,则输出最长的满足条件的的子串;如果不满足条件,则输出false。
输入:
abcabc
输出:
abc
题意:
题目描述
题解:
遍历重复子串所有的可能情况
重复子串的长度必须能被字符串s整除
假设子串长度为len,判断是否是重复子串
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main() {
string s;
while(cin >> s){
int len = 1;
bool flag = false;
for(len = 1; len < s.size(); len ++){
if(s.size()%len != 0) continue;
int pos = 0;
int i = len;
for(i = len;i < s.size(); i ++){
if(s[i] == s[pos]){
pos ++;
if(pos == len){
pos = 0;
}
}
else{
break;
}
}
if(pos == 0 && i == s.size()){
cout << s.substr(0,len) << "\n";
flag = true;
break;
}
}
if(!flag) printf("false\n");
}
return 0;
}
题目名称:
寻找合法字符串
题目描述:
给出一个正整数n,请给出所有的包含n个’(‘和n个’)‘的字符串,使得’(‘和’)‘可以完全匹配。
例如:
‘(())()’,’()()()’ 都是合法的;
'())()('是不合法的。
请按照__字典序__给出所有合法的字符串。
输入描述:
输入为1个正整数
输出描述:
输出为所有合法的字符串,用英文逗号隔开
输入:
2
输出:
(()),()()
题意:
题目描述
题解:
简单dfs,直接爆搜左右括号
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
vector<string> v;
void find_str(int l,int r,string str){
if(l == 0 && r == 0){
v.push_back(str);
return ;
}
if(l > 0) find_str(l - 1,r,str + "(");
if(r > l) find_str(l,r - 1,str + ")");
}
int main(){
int n;
while(scanf("%d",&n)!=EOF){
find_str(n,n,"");
for(int i = 0; i < v.size(); i ++){
cout<<v[i];
if(i != v.size() - 1) cout<<",";
}
cout<<endl;
}
return 0;
}
题目名称:
整数成绩最大化
题目描述:
给出一个整数n,将n分解为至少两个整数之和,使得这些整数的乘积最大化,输出能够获得的最大的乘积。
例如:
2=1+1,输出1;
10=3+3+4,输出36。
输入描述:
输入为1个整数
输出描述:
输出为1个整数
输入:
10
输出:
36
题意:
题目描述
题解:
1,2,3,4单独拿出来
然后其他的分成k个3一定是最优解
代码:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
int main(){
int n;
while(scanf("%d",&n)!=EOF){
if(n == 1) printf("0\n");
else if(n == 2) printf("1\n");
else if(n == 3) printf("2\n");
else if(n == 4) printf("4\n");
else{
int sum = 1;
while(n){
n -= 3;
sum *= 3;
if(n == 2){
sum *= 2;
break;
}
else if(n == 4){
sum *= 4;
break;
}
}
printf("%d\n",sum);
}
}
return 0;
}