【洛谷试炼场】洛谷新手村——简单字符串

题目

1.P1055ISBN号码[NOIP2008普及]
题目链接

#include<iostream>
using namespace std;
int ans,m,g,j;
int main(){
    char b[15];
    for(int i=1;i<=12;i++){
        cin>>b[i];
        if(b[i]!='-'){
        j++;
        ans+=(b[i]-'0')*j;
        }
    }
    cin>>b[13];
    if(b[13]=='X')g=10;
    else g=b[13]-'0';
    m=ans%11;
    if(g==m)cout<<"Right"<<endl;
    else{
        for(int i=1;i<=12;i++)cout<<b[i];
        if(m==10)cout<<'X'<<endl;
        else cout<<ans%11<<endl;
    }
    return 0;
}

2.P1200[USACO1.1]你的飞碟在这儿
题目链接

#include <bits/stdc++.h>
using namespace std;
char a[256],b[256];//彗星,队伍 
int main(){
    gets(a);
    gets(b);
    int lena,lenb;
    lena=strlen(a);
    lenb=strlen(b);
    int i,j,h=1,z=1,x[256],y[256];
    for(i=0;i<=lena-1;i++){
        x[i]=a[i]-'A'+1;
        h*=x[i];
    }
    for(j=0;j<=lenb-1;j++){
        y[j]=b[j]-'A'+1;
        z*=y[j];
    }
    if((h%47)==(z%47)) cout<<"GO"<<endl;
    else cout<<"STAY"<<endl;
    return 0;
}

3.P1308统计单词数[NOIP2011普及]
题目链接

#include<cctype>
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char s1[100],c;
char s2[1000100];
int main(){
    //freopen("testdata.in","r",stdin);
    int i,num=0,j,flag,cnt=0,len1,len2,k;
    scanf("%s",&s1);
    while((c=getchar())!=EOF)
    if(c!='\r'&&c!='\n')
    s2[cnt++]=c;
    len1=strlen(s1);
    len2=strlen(s2);
    for(i=0;i<len1;i++)
    if(isupper(s1[i]))s1[i]=s1[i]-'A'+'a';
    for(i=0;i<len2;i++)
    if(isupper(s2[i]))s2[i]=s2[i]-'A'+'a';
    num=0;
    for(i=0;i<len2;i++){
        flag=0;
        for(j=0;j<len1;j++){
            if(s1[j]==s2[i+j])flag=1;
            else{
                flag=0;
                break;
            }
        }
        if(flag==1){
            if(s2[i+len1]==' '||i+len1==cnt){
                if(s2[i-1]==' '||i==0){
                    num++;
                    if(num==1)
                    k=i;
                }
            }
        }
    }
    if(num>0)printf("%d %d\n",num,k);
    else printf("-1\n");
    return 0;
}

4.P1553数字反转(升级版)
题目链接

#include<cstdio>
#include<cstring>
#include<cctype>
char s[110],t[110];
int main()
{
    //freopen("in.txt","r",stdin);
    scanf("%s",s);
    int len=strlen(s);
    int op=len;
    for(int i=0;i<len;i++)
    if(!isdigit(s[i]))
    {
        op=i;//记录符号下标 
        break;
    }
    for(int i=0;i<op;i++)
    t[i]=s[op-i-1];//翻转前段 
    t[op]=s[op];
    for(int i=op+1;i<len;i++)
    t[i]=s[len-i+op];//翻转后段 
    int k=0;
    while(t[0]=='0'&&t[1]!='.'&&t[1]!='/'&&t[1]!='%'&&strlen(t)>1)
    {
        for(int i=0;i<len-k;i++)//删除前导0 
        t[i]=t[i+1];
        k++;//记录删除的长度 
    }
    if(s[op]=='.')
    {
        while(t[len-k-1]=='0'&&t[len-k-2]!='.'&&t[len-k-2]!='/')
        k++;//删除末尾0 
        for(int i=0;i<len-k;i++)
        printf("%c",t[i]);
    }
    else if(s[op]=='/')
    {
        int x=op-k+1;
        while(t[x]=='0')
        {
            for(int i=x;i<len-k;i++)
            t[i]=t[i+1];//删除分母前导0 
            k++;
        }
        for(int i=0;i<len-k;i++)
        printf("%c",t[i]);
    }
    else for(int i=0;i<len-k;i++)
    printf("%c",t[i]);
    printf("\n");
    return 0;
}

5.P1598垂直柱状图
题目链接

#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
using namespace std;
int a[110];
char s[110];
int main()
{
    #ifdef LOCAL
    freopen("in.txt","r",stdin);
    #endif
    int maxn=0;
    for(int i=1;i<=4;i++)
    {
        gets(s);
        int len=strlen(s);
        for(int j=0;j<len;j++)
        if(isupper(s[j]))a[s[j]-'A'+1]++;
    }
    for(int i=1;i<=26;i++)
    maxn=max(maxn,a[i]);
    for(int t=maxn;t>0;t--)
    {
        for(int i=1;i<=26;i++)
        {
            if(a[i]>=t)
            printf("* ");
            else printf("  ");
        }
        printf("\n");
    }
    for(int i=(int)'A';i<=(int)'Z';i++)
    printf("%c ",(char)i);
    return 0;
}

6.P1914小书童——密码
题目链接

#include <bits/stdc++.h>
using namespace std;
int main(){
    int n,i,lena,m;
    string a,b;
    cin>>n;
    cin>>a;
    lena=a.size();
    for(i=0;i<=lena-1;i++){
        if((a[i]+n)>122)
        b[i]=(a[i]+n)%122+96;
        else b[i]=a[i]+n;
        cout<<b[i];
    }
    cout<<endl;
    return 0;
}

总结

当初写这里也是折腾好久,ASCII码啊字符串操作啊完全不知道(即将AFO弱鸡的怀旧口吻
熟悉一些字符串的操作
在这之后的题应该会每一题发一篇题解,整理到洛谷试炼场部分的博客应该只会粘链接了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值