蓝桥杯模拟试卷(牛客)

水一篇难度偏低(除了暴力就是数学)的博客,有几题题目质量还是不错的!

A. 斐波那契

设f[i]表示斐波那契数论的第i项f[1]=1,f[2] =1,f[i] = f[i - 1] + f[i - 2]
给定一个n
求f[n−1]∗f[n+1]−f[n]^2

 1.0版本:我知道它肯定会有爆开的状态,需要化简降低复杂度,所以可以化简为求

f[n-1]^2-f[n]^2+f[n-1]*f[n]。我以为可,还是卡了。

1.1版本:找规律,发现奇数为-1,偶数为1。兴高采烈的写了,又wa了。卡大数。

2.0版本:取末尾判断奇偶。ac。

找规律yyds 

#include<iostream>
#include<cmath>
#include<cstring>
#include<cstdlib>
#include<string>
#include<algorithm>
using namespace std;
typedef long long LL;
LL f[2000];
int main()
{
    cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
    string s;
    cin>>s;
    if(s[s.size()-1]%2==0) cout<<"1"<<endl;
    else cout<<"-1"<<endl;
    return 0;
}

B.max

Give two positive integer c, n. You need to find a pair of integer (a,b) satisfy 1<=a,b<=n and the greatest common division of a and b is c.And you need to maximize the product of a and b

给了我们两个数c,n。c指的是a和b的gcd,n是a,b的范围1~n。

让我们求出这样的a,b的最大乘积。

#include<iostream>
#include<cmath>
#include<algorithm>
#include<map>
#include<cstring>
#include<cstdlib>
#include<string>
#include<vector>
using namespace std;
typedef long long LL; 
int main()
{
    cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
    LL c,n;
    cin>>c>>n;
    if(c>n) cout<<"-1"<<endl;
    else
    {
        LL a=n;
        a=n/c*c;
        if((a-c)==0) cout<<a*a<<endl;
        else cout<<a*(a-c)<<endl;
    }
    return 0;
}

C.明明的随机数

去重,sort

 D.校门外的树

从0~L每个点都种了树,每次砍掉从a到b的树,问还剩多少?

复杂度不高,暴力过一下就好了

E.密码

给定密匙,密文,求明文。

 题目不难,但是调试了好久。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<string>
#include<cmath>
#include<map>
#include<algorithm>
using namespace std;
typedef long long LL;
int main()
{
    cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
    //CompleteVictory
    //Yvqgpxaimmklongnzfwpvxmniytm
    //Wherethereisawillthereisaway
    //WheXetNeXeiYawOllZhereiYaway
    map<char,int> mp;
    mp['a']=0; mp['A']=0;
    mp['b']=1; mp['B']=1;
    mp['c']=2; mp['C']=2;
    mp['d']=3; mp['D']=3;
    mp['e']=4; mp['E']=4;
    mp['f']=5; mp['F']=5;
    mp['g']=6; mp['G']=6;
    mp['h']=7; mp['H']=7;
    mp['i']=8; mp['I']=8;
    mp['j']=9; mp['J']=9;
    mp['k']=10; mp['K']=10;
    mp['l']=11; mp['L']=11;
    mp['m']=12; mp['M']=12;
    mp['n']=13; mp['N']=13;
    mp['o']=14; mp['O']=14;
    mp['p']=15; mp['P']=15;
    mp['q']=16; mp['Q']=16;
    mp['r']=17; mp['R']=17;
    mp['s']=18; mp['S']=18;
    mp['t']=19; mp['T']=19;
    mp['u']=20; mp['U']=20;
    mp['v']=21; mp['V']=21;
    mp['w']=22; mp['W']=22;
    mp['x']=23; mp['X']=23;
    mp['y']=24; mp['Y']=24;
    mp['z']=25; mp['Z']=25;
    string op;
    cin>>op;
    int len=op.size();
    string idx;
    cin>>idx;
    for(int i=0;i<idx.size();i++)
    {
        int tt=i%len;
        if(op[tt]=='a'||op[tt]=='A') printf("%c",idx[i]-0);
        else if(op[tt]=='b'||op[tt]=='B')
        {
            if(mp[idx[i]]>=1) printf("%c",idx[i]-1);
            else printf("%c",idx[i]+25);
        }
        else if(op[tt]=='c'||op[tt]=='C')
        {
            if(mp[idx[i]]>=2) printf("%c",idx[i]-2);
            else printf("%c",idx[i]+24);
        }
        else if(op[tt]=='d'||op[tt]=='D')
        {
            if(mp[idx[i]]>=3) printf("%c",idx[i]-3);
            else printf("%c",idx[i]+23);
        }
        else if(op[tt]=='e'||op[tt]=='E')
        {
            if(mp[idx[i]]>=4) printf("%c",idx[i]-4);
            else printf("%c",idx[i]+22);
        }
        else if(op[tt]=='f'||op[tt]=='F')
        {
            if(mp[idx[i]]>=5) printf("%c",idx[i]-5);
            else printf("%c",idx[i]+21);
        }
        else if(op[tt]=='g'||op[tt]=='G')
        {
            if(mp[idx[i]]>=6) printf("%c",idx[i]-6);
            else printf("%c",idx[i]+20);
        }
        else if(op[tt]=='h'||op[tt]=='H')
        {
            if(mp[idx[i]]>=7) printf("%c",idx[i]-7);
            else printf("%c",idx[i]+19);
        }
        else if(op[tt]=='i'||op[tt]=='I')
        {
            if(mp[idx[i]]>=8) printf("%c",idx[i]-8);
            else printf("%c",idx[i]+18);
        }
        else if(op[tt]=='j'||op[tt]=='J')
        {
            if(mp[idx[i]]>=9) printf("%c",idx[i]-9);
            else printf("%c",idx[i]+17);
        }
        else if(op[tt]=='k'||op[tt]=='K')
        {
            if(mp[idx[i]]>=10) printf("%c",idx[i]-10);
            else printf("%c",idx[i]+16);
        }
        else if(op[tt]=='l'||op[tt]=='L')
        {
            if(mp[idx[i]]>=11) printf("%c",idx[i]-11);
            else printf("%c",idx[i]+15);
        }
        else if(op[tt]=='m'||op[tt]=='M')
        {
            if(mp[idx[i]]>=12) printf("%c",idx[i]-12);
            else printf("%c",idx[i]+14);
        }
        else if(op[tt]=='n'||op[tt]=='N')
        {
            if(mp[idx[i]]>=13) printf("%c",idx[i]-13);
            else printf("%c",idx[i]+13);
        }
        else if(op[tt]=='o'||op[tt]=='O')
        {
            if(mp[idx[i]]>=14) printf("%c",idx[i]-14);
            else printf("%c",idx[i]+12);
        }
        else if(op[tt]=='p'||op[tt]=='P')
        {
            if(mp[idx[i]]>=15) printf("%c",idx[i]-15);
            else printf("%c",idx[i]+11);
        }
        else if(op[tt]=='q'||op[tt]=='Q')
        {
            if(mp[idx[i]]>=16) printf("%c",idx[i]-16);
            else printf("%c",idx[i]+10);
        }
        else if(op[tt]=='r'||op[tt]=='R')
        {
            if(mp[idx[i]]>=17) printf("%c",idx[i]-17);
            else printf("%c",idx[i]+9);
        }
        else if(op[tt]=='s'||op[tt]=='S')
        {
            if(mp[idx[i]]>=18) printf("%c",idx[i]-18);
            else printf("%c",idx[i]+8);
        }
        else if(op[tt]=='t'||op[tt]=='T')
        {
            if(mp[idx[i]]>=19) printf("%c",idx[i]-19);
            else printf("%c",idx[i]+7);
        }
        else if(op[tt]=='u'||op[tt]=='U')
        {
            if(mp[idx[i]]>=20) printf("%c",idx[i]-20);
            else printf("%c",idx[i]+6);
        }
        else if(op[tt]=='v'||op[tt]=='V')
        {
            if(mp[idx[i]]>=21) printf("%c",idx[i]-21);
            else printf("%c",idx[i]+5);
        }
        else if(op[tt]=='w'||op[tt]=='W')
        {
            if(mp[idx[i]]>=22) printf("%c",idx[i]-22);
            else printf("%c",idx[i]+4);
        }
        else if(op[tt]=='x'||op[tt]=='X')
        {
            if(mp[idx[i]]>=23) printf("%c",idx[i]-23);
            else printf("%c",idx[i]+3);
        }
        else if(op[tt]=='y'||op[tt]=='Y')
        {
            if(mp[idx[i]]>=24) printf("%c",idx[i]-24);
            else printf("%c",idx[i]+2);
        }
        else if(op[tt]=='z'||op[tt]=='Z')
        {
            if(mp[idx[i]]>=25) printf("%c",idx[i]-25);
            else printf("%c",idx[i]+1);
        }
    }
    return 0;
}

F.金币

k天得了多少金币?i*i    i*n

G.买铅笔

(一盒)a根铅笔b块钱,我要买c根,3种买哪一种最少钱?

H.成绩

*0.2+*0.3+*0.5

I.Cities

 开long long就行惹

#include<iostream>
#include<cmath>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long LL; 
LL a[200200];
int main()
{
    cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
    LL t;
    cin>>t;
    while(t--)
    {
        LL n;
        cin>>n;
        LL minn=0x3f3f3f3f;
        LL flag=0;
        for(LL i=1;i<=n;i++)
        {
            cin>>a[i];
            if(a[i]<minn) minn=a[i],flag=i;
        }
        LL sum=0;
        for(LL i=1;i<=n;i++)
        {
            if(i!=flag) sum+=minn+a[i];
            else continue;
        }
        cout<<sum<<endl;
    }
    return 0;
}

J.输出‘Z’

-->
./.
<--

 K.五子棋

求五子棋的输赢。

一开始想用dfs跑一下,后来觉得这样也太费事了,直接枚举吧,虽然它有上下左右左上左下右上右下八个方位,但是由于是从前往后枚举,所以直接把一半留下就行(左下+右下+右+下)

#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<string>
#include<map>
using namespace std;
char a[2002][2002];
int main()
{
    //cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
    int t;
    cin>>t;
    while(t--)
    {
        int n;
        cin>>n;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                cin>>a[i][j];
            }
        }
        bool flagw=false;
        bool flagb=false;
        for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                if(a[i][j]=='w')
                {
                    if(j+4<=n&&a[i][j+1]=='w'&&a[i][j+2]=='w'&&a[i][j+3]=='w'&&a[i][j+4]=='w') flagw=true;
                    else if(i+4<=n&&a[i+1][j]=='w'&&a[i+2][j]=='w'&&a[i+3][j]=='w'&&a[i+4][j]=='w') flagw=true;
                    else if(i+4<=n&&j+4<=n&&a[i+1][j+1]=='w'&&a[i+2][j+2]=='w'&&a[i+3][j+3]=='w'&&a[i+4][j+4]=='w') flagw=true;
                    else if(i+4<=n&&j-4>=0&&a[i+1][j-1]=='w'&&a[i+2][j-2]=='w'&&a[i+3][j-3]=='w'&&a[i+4][j-4]=='w') flagw=true;
                    if(flagw==true) break;
                }
                else if(a[i][j]=='b')
                {
                    if(j+4<=n&&a[i][j+1]=='b'&&a[i][j+2]=='b'&&a[i][j+3]=='b'&&a[i][j+4]=='b') flagb=true;
                    else if(i+4<=n&&a[i+1][j]=='b'&&a[i+2][j]=='b'&&a[i+3][j]=='b'&&a[i+4][j]=='b') flagb=true;
                    else if(i+4<=n&&j+4<=n&&a[i+1][j+1]=='b'&&a[i+2][j+2]=='b'&&a[i+3][j+3]=='b'&&a[i+4][j+4]=='b') flagb=true;
                    else if(i+4<=n&&j-4>=0&&a[i+1][j-1]=='b'&&a[i+2][j-2]=='b'&&a[i+3][j-3]=='b'&&a[i+4][j-4]=='b') flagb=true;
                    if(flagb==true) break;
                }
                if(flagw==true||flagb==true) break;
            }
            if(flagw==true||flagb==true) break;
        }
        if(flagw==true) cout<<"FYMNB"<<endl;
        else if(flagb==true) cout<<"DDNB"<<endl;
        else cout<<"PINGJU"<<endl;
    }
    return 0;
}

L.三的倍数

给你两个正整数L, R, 然后把L到R之间的数连起来形成一个新的数x。判断x是不是3的倍数。

例如:L = 2, R = 4, 则 x = 234;  L = 10, R =12, x = 101112.

可以发现,3个3个的时候可以直接组成3的倍数,所以直接求余特判即可。 

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<string>
#include<cmath>
#include<map>
#include<algorithm>
using namespace std;
typedef long long LL;
int main()
{
    cin.tie(0); cout.tie(0); ios::sync_with_stdio(false);
    LL t;
    cin>>t;
    while(t--)
    {
        LL a,b;
        cin>>a>>b;
        LL sum=(b-a)+1;
        if(sum%3==0) cout<<"YES"<<endl;
        else if(sum%3==1)
        {
            if(a%3==0) cout<<"YES"<<endl;
            else cout<<"NO"<<endl;
        }
        else
        {
            if((a%3+(a+1)%3)%3==0) cout<<"YES"<<endl;
            else cout<<"NO"<<endl;
        }
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Vijurria

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值