A - 雷同检测
#include <bits/stdc++.h>
using namespace std;
char a[210],b[210];
int main(){
gets(a);
gets(b);
int lena=strlen(a);
int lenb=strlen(b);
int min=lena<lenb?lena:lenb;
for(int i=0;i<min;i++){
if(a[i]==b[i])
cout<<i+1<<" ";
}
cout<<'\n';
return 0;
}
B - 首字母大写
#include <bits/stdc++.h>
using namespace std;
char a[100];
int main(){
gets(a);
int len=strlen(a);
if(a[0]>='a')
a[0]-=32;
for(int i=1;i<len;i++){
if(a[i-1]==' '||a[i-1]=='\n'||a[i-1]=='\t'||a[i-1]=='\r'){
if(a[i]>='a')
a[i]-=32;
}
}
puts(a);
return 0;
}
C - 大小写转换
#include <bits/stdc++.h>
using namespace std;
char a[100];
int main(){
while(scanf("%s",a)==1){
int len=strlen(a);
for(int i=0;i<len;i++){
if(a[i]>='a')
a[i]-=32;
}
puts(a);
}
return 0;
}
D - 数字反转
#include <bits/stdc++.h>
using namespace std;
char a[15],b[15];
int main(){
gets(a);
int len;
if(a[0]=='-'){
cout<<'-';
len=strlen(a);
int flag=len-1;
for(int i=flag;i>=1;i--){
if(a[i]!='0'){
flag=i;
break;
}
}
for(int i=flag;i>=1;i--)
cout<<a[i];
}
else{
len=strlen(a);
int flag=len-1;
for(int i=len-1;i>=0;i--){
if(a[i]!='0'){
flag=i;
break;
}
}
for(int i=flag;i>=0;i--)
cout<<a[i];
}
cout<<'\n';
return 0;
}
E - 删除单词后缀
#include <bits/stdc++.h>
using namespace std;
char a[40];
int main(){
gets(a);
int len=strlen(a),flag=0;
if(a[len-1]=='r'&&a[len-2]=='e')
flag=2;
else if(a[len-1]=='y'&&a[len-2]=='l')
flag=2;
else if(a[len-1]=='g'&&a[len-2]=='n'&&a[len-3]=='i')
flag=3;
for(int i=0;i<=len-1-flag;i++)
cout<<a[i];
cout<<'\n';
return 0;
}
F - 判断字符串是否为回文
#include <bits/stdc++.h>
using namespace std;
char a[110];
int main(){
gets(a);
int len=strlen(a),flag=1;
for(int i=0;i<=len/2;i++){
if(a[i]!=a[len-1-i]){
flag=0;
break;
}
}
if(flag)
cout<<"yes";
else
cout<<"no";
cout<<'\n';
return 0;
}
G - 基础数据结构——栈(1)
#include<bits/stdc++.h>
using namespace std;
int main()
{
char s1[101];
char s2[101];
while (gets(s1))
{
int zk = 0;
int flag = 0;
for (int i = 0; i < strlen(s1); i++)
{
if (s1[i] == '(' || s1[i] == '[' || s1[i] == '{')
{
s2[zk++] = s1[i];
}
else if (s1[i] == ')') // 遍历到 ) 时
{
zk--;
if (zk < 0 || s2[zk] != '(') //栈内元素没了 或者 栈顶不是(
{
flag = 1;
break;
}
}
else if (s1[i] == ']')
{
zk--;
if (zk < 0 || s2[zk] != '[')
{
flag = 1;
break;
}
}
else if (s1[i] == '}')
{
zk--;
if (zk < 0 || s2[zk] != '{')
{
flag = 1;
break;
}
}
}
if (flag == 1 || zk != 0)cout << "no" << endl; //栈内还有元素 或者 匹配不成功
else cout << "yes" << endl;
}
return 0;
}
H - 字典序
#include <bits/stdc++.h>
using namespace std;
int main(){
string a,b;
cin>>a;
cin>>b;
if(a<b)
cout<<"YES"<<"\n";
else
cout<<"NO"<<"\n";
return 0;
}
I - 验证子串
#include <bits/stdc++.h>
using namespace std;
int main(){
string a,b;
cin>>a;
cin>>b;
int flag1=0,flag2=0;
flag1=b.find(a);
flag2=a.find(b);
if(flag1>0)
cout<<a<<" is substring of "<<b;
else if(flag2>0)
cout<<b<<" is substring of "<<a;
else
cout<<"No substring";
cout<<"\n";
return 0;
}
J - 子串查找
#include <bits/stdc++.h>
using namespace std;
int ne[1000100],len1,len2;
char a[1000100],b[1000100];
void get_next()
{
int j=-1,i=0;
ne[0]=-1;
while(i<len2)
{
if(j==-1||b[i]==b[j])
{
i++; //i仍然是0
j++; //j仍然是-1
ne[i]=j; //在这个里面 i已经变成1 ,j已经变成·0 ,这与ne[i++]=j++ 不一样
}
else
j=ne[j];
}
}
void kmp()
{
int j=0,i=0;
int ans=0;
// get_next();
while(i<len1)
{
if(j==-1||a[i]==b[j])
{
++i;
++j;
}
else
j=ne[j];
if(j==len2)
{
j=ne[j]; //题目说可以叠加 ,如果不能叠加 j=0
ans++;
}
}
printf("%d\n",ans);
}
int main()
{
scanf("%s %s",a,b);
len1=strlen(a); //主
len2=strlen(b); //子
if(len2>len1)
printf("0\n");
get_next();
kmp();
return 0;
}
K - 剪花布条
#include <bits/stdc++.h>
using namespace std;
int ne[1010],len1,len2;
char a[1010],b[1010];
void get_next()
{
int j=-1,i=0;
ne[0]=-1;
while(i<len2)
{
if(j==-1||b[i]==b[j])
{
i++;
j++;
ne[i]=j;
}
else
j=ne[j];
}
}
void kmp()
{
int j=0,i=0;
int ans=0;
while(i<len1)
{
if(j==-1||a[i]==b[j])
{
++i;
++j;
}
else
j=ne[j];
if(j==len2)
{
j=0;
ans++;
}
}
printf("%d\n",ans);
}
int main()
{
while (scanf("%s",a)!=EOF){
if (a[0] == '#'&&strlen(a) == 1)break;
scanf("%s",b);
len1=strlen(a);
len2=strlen(b);
if(len2>len1)
printf("0\n");
get_next();
kmp();
}
return 0;
}
L - 最长回文子串
#include<bits/stdc++.h>
using namespace std;
char s[1010];
int dp[1010][1010];
int main()
{
scanf("%s",s);;
int len = strlen(s),ans=1;
for (int i = 0; i < len; i++)
{
dp[i][i] = 1;
if (i < len - 1)
{
if (s[i] == s[i + 1])
{
dp[i][i + 1] = 1;
ans = 2;
}
}
}
for (int j = 3; j <= len; j++)
{
for (int i = 0; i + j - 1 < len; i++)
{
int l = i + j - 1;
if (s[i] == s[l] && dp[i + 1][l - 1] == 1)
{
dp[i][l] = 1;
ans = j;
}
}
}
cout << ans <<"\n";
return 0;
}