18/10/19 周五欢乐赛题解(c++版)

本文解析了八个编程挑战题目,包括字符串查找、数学运算、斜率计算、成绩对比、队列模拟、环形求和、数字换位及统计,提供了详细的代码实现,适合初学者实践和提升编程技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意本题解并没有去追求最优解,只是用比较暴力的方法求解。D题听说要改说明不是位数30位,目前除了D题可能有问题之外其他代码已经全部正确。

A.查找字串

用string BF(暴力求解即可)

代码

#include <bits/stdc++.h>
using namespace std;
main()
{
    string a,b;
    cin>>a>>b;
    for(int i=0;i<a.size();i++)
    {
        int f=1;
        if(a[i]==b[0])
        {
            for(int j=0;j<b.size();j++)
            if(a[i+j]!=b[j])
            {
                f=0;
                break;
            }
            if(f) 
            return cout<<"Y",0;
        }
    }
    cout<<"N";
}

B.A+B Problem

a+b不多解释,注意用long long

代码

#include <bits/stdc++.h>
using namespace std;
main()
{
    long long a,b;
    cin>>a>>b;
    cout<<a+b;
}

C.斜率

非常简单的数学题,注意斜率不存在即为Δx为0

代码

#include <bits/stdc++.h>
using namespace std;
main()
{
    double ax,ay,bx,by;
    cin>>ax>>ay>>bx>>by;
    if(bx-ax==0)
    return cout<<"NO",0;
    double k=(by-ay)/(bx-ax);
    printf("%.2lf",k);
}

D.小明的成绩

直接在输入的时候找出最大值之后求差判断即可

代码

#include <bits/stdc++.h>
using namespace std;
main()
{
    int a1,b1,c1;
    cin>>a1>>b1>>c1;
    int ans1,ans2,ans3;
    int n;  
    cin>>n;
    while(n--)
    {
        int n1,n2,n3;
        cin>>n1>>n2>>n3;
        ans1=max(ans1,n1);
        ans2=max(ans2,n2);
        ans3=max(ans3,n3);
    }
    (ans1-a1>0)?cout<<ans1-a1:cout<<0;
    cout<<" ";
    (ans2-b1>0)?cout<<ans2-b1:cout<<0;
    cout<<" ";
    (ans3-c1>0)?cout<<ans3-c1:cout<<0;  
} 

E.D\Q数球

标准的队列模拟题,直接用队列模拟即可,把经过的球放到队尾,数到的球踢出队列即可

代码

#include <bits/stdc++.h>
using namespace std;
main()
{
    int n;
    while(cin>>n)
    {
        queue<int> q;
        for(int i=1;i<=n;i++)
        q.push(i);
        while(1)
        {
            if(q.size()==1)
            {
                cout<<q.front()<<endl;
                break;
            }
            for(int i=0;i<2;i++)
            {
                int t=q.front();
                q.pop();
                q.push(t);  
            }
            q.pop(); 
        }
    }
}

F.环形求和

最大子序列和的翻版问题设置两个变量sum和id,sum用来记录最大值,id用来记录下标。然后循环里面的t用来记录一次要加多少的数

代码

#include <bits/stdc++.h>
using namespace std;
int num[105];
main()
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++)
    cin>>num[i];
    for(int i=n+1;i<n+4;i++)
    num[i]=num[i-n];
    int ans=0;int id=1;
    for(int i=1;i<=n;i++)
    {
        int sum=0;
        for(int j=i;j<=i+3;j++)
        sum+=num[j];
        if(sum>ans)
        {
            ans=sum;
            id=i;
        }
    }
    cout<<ans<<endl<<id;
}

G.数字换位

直接转换成字符串倒叙输出即可

代码

#include <bits/stdc++.h>
using namespace std;
main()
{
    string a;
    cin>>a;
    reverse(a.begin(),a.end());
    cout<<a;
}

H.数字统计

还是直接转换成字符串硬解统计即可

代码

#include <bits/stdc++.h>
using namespace std;
main()
{
    int L,R;
    cin>>L>>R;
    int sum=0;
    for(int i=L;i<=R;i++)
    {
        stringstream s;
        s<<i;
        string ss;
        s>>ss;
        for(int i=0;i<ss.size();i++)
        if(ss[i]=='2')
        sum++;
    }
    cout<<sum;
}

转载于:https://www.cnblogs.com/baccano-acmer/p/9819952.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值