【2022寒假训练营】小组内题解

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<stdio.h>
int main(){
	long int a,sum=0;
	scanf("%ld",&a);
	int i=0,j=0,b[10],c,d,e;
	if(a<0){
	a=-a;
	e=-1;}
	if(a>0){
	do{
	b[i]=a%10;
		i++;
		j++;
		a=a/10;
	}
	while(a!=0);
	for(c=0;c<j;c++){
		for(d=c;d<j-1;d++){
			b[c]=b[c]*10;
		}
		sum+=b[c];
	}}
	if(e==-1)
	sum=-sum;
	printf("%ld",sum);
	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 <stdio.h> 
#include <string.h> 
#define n 1001 
int main() { 
char s[n], a[n]; 
while(gets(s)) { 
int len,i,top = 0; 
len= strlen(s); 
for(i = 0; i < len; i++) { 
if(s[i] == '(' || s[i] == '[' || s[i] == '{') { 
a[++top] = s[i]; } else if(s[i] == ')') {
 if(a[top] == '(') top--; 
else { top++; break; } } 
else if(s[i] == ']') { 
if(a[top] == '[') top--; 
else { 
top++; break; } } 
else if(s[i] == '}') { 
if(a[top] == '{') top--; 
else { 
top++; break; } } } 
if(top!=0) 
printf("no\n"); 
else 
printf("yes\n"); } 
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;
const int mx=1e6;
int ne[mx+10],len1,len2;
char a[mx+10],b[1e6+10];
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=ne[j];     
               ans++;
         }
     }
     cout<<ans<<"\n";
}
int main()
{
    gets(a);
    gets(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)
        	cout<<"0\n";
     	get_next();
     	kmp();
    }
    return 0;
}

L - 最长回文子串

#include<stdio.h>
#include<string.h>
int main(){
	char a[1000];
	int i,j,n,x,y,max=1,z=1;
	gets(a);
	n=strlen(a);
	for(i=0;i<n;i++){
		for(j=0;j<n;j++){
			if(i+j>=n)break;
			for(x=j,y=j+i;x<=y;x++,y--)
			{
				if(a[x]!=a[y])
				z=0;
			}
			if(z==1){
				z=i+1;
				if(max<z)
				max=z;
			}
			z=1; 
		}
	}
	printf("%d",max);
return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值