第15届蓝桥杯校内模拟赛(第二期)C/C++

第一题

#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
    cout<<(36*30)/10;
    return 0;
}

第二题

#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main(){
    int t=2;
    for(int i=2;i<=2023;i++){
        t=(t*2)%1000;
    }
    cout<<t<<endl;
    return 0;
}

第三题

#include<bits/stdc++.h>
using namespace std;
#define int long long
vector<int> tov(int i,int t){
    vector<int>n;
    do{
        n.push_back(i%t);
        i=i-i%t;
        i/=t;
    }while(i!=0);
    return n;
}
bool euq(vector<int>t,vector<int>e){
    int tt=0;
    int ee=0;
    for(vector<int>::iterator it=t.begin();it!=t.end();it++){
        tt+=*it;
    }
    for(vector<int>::iterator it=e.begin();it!=e.end();it++){
        ee+=*it;
    }
    return tt==ee;
}
signed main(){
    int count=0;
    for(int i=1;;i++){
        vector<int>t=tov(i,2);
        vector<int>e=tov(i,8);
        if(euq(t,e)){
            count++;
            if(count==23){
                cout<<i<<endl;
                break;
            }
        }
    }
    return 0;
}

这题可以暴力枚举

2进制进位和和8进制进位和如果一样的话可以这样考虑

2进制只有0,1两个数

如果相等的话8进制也应该只有0,1两个数字

#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve(){
    // 1
    // 10
    // 11
    // 100
    // 101
    // 110
    // 111
    // 1000
    // 1001
    // 1010
    // 1011
    // 1100
    // 1101
    // 1110
    // 1111
    // 10000
    // 10001
    // 10010
    // 10011
    // 10100
    // 10101
    // 10110  第23个在这里
    // 10111
    // 11000
    // 11001
    // 11010
    // 11100
    // 11101
    // 11110
    // 11111
    // 10111
    cout<<pow(8,4)+pow(8,2)+pow(8,1)+pow(8,0);
}
signed main(void){
    int _=1;
    while(_--){
        solve();
    }
}

第四题

#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve(){
    int n;
    cin>>n;
    vector<int>nn(n);
    for(vector<int>::iterator it=nn.begin();it!=nn.end();it++){
        cin>>*it;
    }
    vector<int>num;
    int max=0;
    for(vector<int>::iterator it=nn.begin();it!=nn.end();it++){
        int count=0;
        for(int i=1;i<=*it;i++){
            if(*it%i==0){
                count++;
            }
        }
        if(num.empty()){
            num.push_back(*it);
            max=count;
            continue;
        }
        if(count>max){
            num.clear();
            num.push_back(*it);
            max=count;
            continue;
        }
        if(count==max){
            num.push_back(*it);
            max=count;
            continue;
        }
    }
    cout<<*num.begin()<<endl;
}
signed main(void){
    int _=1;
    while(_--){
        solve();
    }
    return 0;
}

第五题

经典dfs题目

#include<bits/stdc++.h>
using namespace std;
#define int long long
vector<string>MAP;
int m,n;
void dfs(int i,int j){
    if(i < 0 || i >= m || j < 0 || j >= n)
        return;
    if(MAP[i][j]!='0')
        return;
    MAP[i][j] = '2';
    dfs(i - 1, j);
    dfs(i + 1, j);
    dfs(i, j - 1);
    dfs(i, j + 1);
}
void slove(){
    cin>>m>>n;
    MAP.resize(m);
    for(vector<string>::iterator it=MAP.begin();it!=MAP.end();it++){
        cin>>*it;
    }
    dfs(0,0);
    int num=0;
    for(vector<string>::iterator it=MAP.begin();it!=MAP.end();it++){
        string t=*it;
        for(string::iterator it2=t.begin();it2!=t.end();it2++){
            if(*it2=='2'){
                num++;
            }
        }
    }
    cout<<num;
}
signed main(){
    int _=1;
    while(_--){
        slove();
    }
    return 0;
}

第六题

把第一个加在字符串最后,然后从第二个开始输出

#include<bits/stdc++.h>
using namespace std;
#define int long long
void solve(){
    string a;
    cin>>a;
    a=a+a[0];
    for(int i=1;i<a.size();i++){
        cout<<a[i];
    }
}
signed main(void){
    int _=1;
    while(_--){
        solve();
    }
    return 0;
}

第七题

#include <bits/stdc++.h>
using namespace std;
#define int long long
void solve()
{
    string a;
    cin >> a;
    for (string::reverse_iterator it = a.rbegin(); it != a.rend(); it++)
    {
        if (*it == 'a' || *it == 'e' || *it == 'i' || *it == 'o' || *it == 'u')
        {
            cout << *it;
            break;
        }
    }
}
signed main(void)
{
    int _ = 1;
    while (_--)
    {
        solve();
    }
    return 0;
}

第八题

递归(字符串写法)

#include <bits/stdc++.h>
using namespace std;
#define int long long
void fruit(string a){
    if(a.size()<=1){
        cout<<a;
        return;
    }
    int all=1;
    for(string::iterator it=a.begin();it!=a.end();it++){
        if(*it!='0'){
            all*=((int)*it-48);
        }
    }
    fruit(to_string(all));
}
void solve()
{
    string a;
    cin>>a;
    fruit(a);
}
signed main(void)
{
    int _ = 1;
    while (_--)
    {
        solve();
    }
    return 0;
}

迭代(数字写法)

#include <bits/stdc++.h>
using namespace std;
#define int long long
void solve()
{
    int a;
    cin >> a;
    while (a >= 10)
    {
        int temp = 1;
        while (a)
        {
            if (a % 10 != 0)
                temp = temp * (a % 10);
            a /= 10;
        }
        a = temp;
    }
    cout <<a;
}
signed main(void)
{
    int _ = 1;
    while (_--)
    {
        solve();
    }
    return 0;
}

第九题

dfs+辗转相除

#include <bits/stdc++.h>
using namespace std;
#define int long long
vector<vector<pair<int, int>>> MAP;
int m, n;
int num = 0;
int zzxc(int a, int b)
{
    if (a < b)
    {
        int temp;
        temp = a;
        a = b;
        b = temp;
    }
    int d = 1;
    while (d)
    {
        d = a % b;
        a = b;
        b = d;
    }
    return a;
}
void dfs(int i, int j)
{
    if (i < 0 || i >= m || j < 0 || j >= n)
        return;
    MAP[i][j].second = 1;
    num++;
    if (!(i + 1 < 0 || i + 1 >= m || j < 0 || j >= m) && MAP[i + 1][j].second != 1 && zzxc(MAP[i][j].first, MAP[i + 1][j].first) > 1)
        dfs(i + 1, j);
    if (!(i - 1 < 0 || i - 1 >= m || j < 0 || j >= m) && MAP[i - 1][j].second != 1 && zzxc(MAP[i][j].first, MAP[i - 1][j].first) > 1)
        dfs(i - 1, j);
    if (!(i < 0 || i >= m || j + 1 < 0 || j + 1 >= m) && MAP[i][j + 1].second != 1 && zzxc(MAP[i][j].first, MAP[i][j + 1].first) > 1)
        dfs(i, j + 1);
    if (!(i < 0 || i >= m || j - 1 < 0 || j - 1 >= m) && MAP[i][j - 1].second != 1 && zzxc(MAP[i][j].first, MAP[i][j - 1].first) > 1)
        dfs(i, j - 1);
}
void solve()
{
    cin >> m >> n;
    MAP.resize(m);
    for (vector<vector<pair<int, int>>>::iterator it = MAP.begin(); it != MAP.end(); it++)
    {
        vector<pair<int, int>> t(n);
        for (vector<pair<int, int>>::iterator it2 = t.begin(); it2 != t.end(); it2++)
        {
            int temp;
            cin >> temp;
            *it2 = make_pair(temp, 0);
        }
        *it = t;
    }
    int a, b;
    cin >> a >> b;
    dfs(a - 1, b - 1);
    cout << num;
}
signed main(void)
{
    int _ = 1;
    while (_--)
    {
        solve();
    }
    return 0;
}

第十题

#include <bits/stdc++.h>
using namespace std;
#define int long long
void solve()
{
    int n,k;
    cin>>n>>k;
    vector<int> nn(n);
    for(vector<int>::iterator it=nn.begin();it!=nn.end();it++){
        cin>>*it;
    }
    int num=0;
    for(int i=0;i<=n-k;i++){
        int temp=0;
        for(int j=0;j<k;j++){
            temp+=nn[i+j];
        }
        if(temp>=num){
            num=temp;
        }
    }
    cout<<num;
}
signed main(void)
{
    int _ = 1;
    while (_--)
    {
        solve();
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值