我是靠谱客的博主 俭朴苗条,最近开发中收集的这篇文章主要介绍第三届上海市青少年算法竞赛题解,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

第三届上海市青少年算法竞赛题解

T1 数洞洞

#include<bits/stdc++.h>
using namespace std;
int a[11]={0,1,0,0,0,1,0,1,0,2,1},num=0;
int n;
int main()
{
	cin>>n;
	while(n!=0)
	{
		int t=n%10;
		n/=10;
		num+=a[t+1];
	}
	cout<<num;
	return 0;
}

T2 中位数

#include<bits/stdc++.h>
using namespace std;
const long long MAXN=3*1e5+20;
long long n,a[MAXN],num;
bool cmp(long long a,long long b)
{
    if(a>b)
    {
        return true;
    }
    else
    {
        return false;
    }
}
int main()
{
    scanf("%lld",&n);
    for(int i=1;i<=3*n;i++)
    {
        scanf("%lld",&a[i]);
    }
    sort(a+1,a+3*n+1,cmp);
    for(int i=2;i<=2*n;i+=2)
    {
        num+=a[i];
    }
    printf("%lld",num);
	return 0;
}

T3 凯撒解密

#include<bits/stdc++.h>
using namespace std;
string t,s;
vector<int>a;
int main()
{
    getline(cin,t);
    getline(cin,s);
    s=" "+s+" ";
    for(int i=1;i<26;i++)
    {
        string b;
        for(int j=0;j<t.size();j++)
        {
            b+=char(((t[j]-'a'+i)%26)+'a');
        }
        b=" "+b+" ";
        if(s.find(b)!=string::npos)
        {
            a.push_back(i);
        }
    }
    if(a.empty()!=0)
    {
        cout<<"Error"<<endl;
    }
    else
    {
        cout<<a.size()<<endl;
        for(int i=0;i<a.size();i++)
        {
            cout<<a[i]<<" ";
        }
    }
	return 0;
}

T4 三倍子串

#include<bits/stdc++.h>
using namespace std;
string a;
long long b[3],s=0,n,ans;
int main()
{
    cin>>a;
    n=a.size();
    for(long long i=0;i<n;i++)
    {
        s+=a[i]-'0';
        s%=3;
        b[s]++;
    }
    ans=(b[0]+1)*b[0]/2;
    ans+=(b[1]-1)*b[1]/2;
    ans+=(b[2]-1)*b[2]/2;
    printf("%lld",ans);
    return 0;
}

T5 阶乘的因数

#include<bits/stdc++.h>
using namespace std;
long long num[5020],n,sum[1020]={1,1};
vector<long long>is_prime;
void panduan1();
void panduan2(long long a);
void panduan3(long long a);
int main()
{
    scanf("%lld",&n);
    panduan1();
    for(long long i=2;i<=n;i++)
    {
        panduan2(i);
    }
    for(long long i=2;i<=n;i++)
    {
        if(num[i])
        {
            panduan3(num[i]+1);
        }
    }
    for(long long i=sum[0];i>0;i--)
    {
        printf("%lld",sum[i]);
    }
	return 0;
}
void panduan1()
{
    for(long long i=2;i<=5000;i++)
    {
        bool flag=true;
        for(long long j=2;j<i;j++)
        {
            if(i%j==0)
            {
                flag=false;
                break;
            }
        }
        if(flag)
        {
            is_prime.push_back(i);
        }
    }
}
void panduan2(long long a)
{
    for(long long i:is_prime)
    {
        while(a%i==0)
        {
            num[i]++;
            a/=i;
        }
        if(a==1)
        {
            break;
        }
    }
}
void panduan3(long long a)
{
    for(long long i=1;i<=sum[0];i++)
    {
        sum[i]*=a;
    }
    long long mod=0;
    for(long long i=1;i<=sum[0];i++)
    {
        sum[i]+=mod;
        mod=sum[i]/10;
        sum[i]%=10;
    }
    while(mod)
    {
        sum[0]++;
        sum[sum[0]]=mod%10;
        mod/=10;
    }
}

最后

以上就是俭朴苗条为你收集整理的第三届上海市青少年算法竞赛题解的全部内容,希望文章能够帮你解决第三届上海市青少年算法竞赛题解所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(63)

评论列表共有 0 条评论

立即
投稿
返回
顶部