主页

1.门牌制作

#include<iostream>
#include<string>
using namespace std;
int main()
{
    int i;
    int sum = 0;
    for (i = 1; i <= 2020;++i)
    {
        int in = i;
        while (in)
        {
            if (in % 10 == 2)
            {
                ++sum;
            }
            in /= 10;
        }
    }
    cout << sum;
    return 0;
}
624

2.既约分数

#include<iostream>
using namespace std;
int gcd(int a,int b){
    return b==0?a:gcd(b,a%b);
}
int main(){
    int ans=0;
    for(int i=1;i<=2020;++i){
        for(int j=1;j<=2020;++j){
            if(gcd(i,j)==1)
                ++ans;
        }
    }
    cout<<ans;
    return 0;
}
2481215

3.蛇形填数

#include<iostream>
using namespace std;
int main() {
    int i = 0;
    int j = 0;
    int cnt = 2;
    int a[250][250];
    a[0][0] = 1;
    while (cnt <1000) {
        j++;
        while (i != -1 && j != -1) {
            a[i][j] = cnt++;
            if (j == 0)
            break;
            i++;
            j--;
        }
        i++;
        while (i != -1 && j != -1) {
            a[i][j] = cnt++;
            if (i == 0)
            break;
            i--;
            j++;
        }
    }    
    cout << a[19][19];
    return 0;
}
761

4.跑步锻炼

#include <bits/stdc++.h>
using namespace std;
int M[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int main()
{
    int y=2000,m=1,d=1,w=6,ans=2;
    while(y!=2020||m!=10||d!=1)
    {
        if((y%4==0&&y%100!=0)||y%400==0)
            M[2]=29;
        else
            M[2]=28;
        d++;
        w=(w+1)%7;
        if(d>M[m])
        {
            d=1;
            m++;
            if(m>12)
            {
                y++;
                m=1;
            }
        }        
        if(d==1||w==1)
            ans++;
        ans++;        
    }
    cout<<ans;
}
8879

5.七段码

80

6.成绩统计

#include <bits/stdc++.h>
using namespace std;
int a[100010];
int n;

int main()
{
    
    cin>>n;
    
    for(int i=0;i<n;i++) cin>>a[i];
    int num1=0,num2=0;
    
    for(int i=0;i<n;i++)
    {
        if(a[i]>=85)
        {
            num1++;
        }
         if(a[i]>=60 )
        {
            num2++;
        }
    }
cout<<round(num2*1.0/n*100)<<'%'<<endl;
cout<<round(num1*1.0/n*100)<<'%'<<endl;
    
    
}

7.回文日期

#include <bits/stdc++.h>
using namespace std;

int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};

bool check(int data)
{
    int year=data/10000;
    int month=(data/100)%100;
    int day=data%100;
    if(month<0 || month>12)
        return false;
    if(day==0 || month!=2 && day>days[month])
        return false;
    if(month==2)
    {
        int leap=(year%4==0 && year%100 !=0) || (year%400==0);
        if(day>days[month]+leap)
            return false;
    }
    return true;
}

int main()
{
    int data;
    int hui=0,abhui=0;
    int flag1=0,flag2=0;
    int s[9]={0};
    int i,x;
    cin>>data;
    for(i=data+1;flag1==0||flag2==0;i++)
    {
        memset(s,0,8*sizeof(int));
        if(check(i))
        {
            x=i;
            for(int j=8;j>0;j--)
            {
                s[j]=x%10;
                x=x/10;
            }
            if(s[1]==s[8] && s[2]==s[7] &&s[3]==s[6] && s[4]==s[5] && flag1==0)
            {
                flag1=1;
                hui=i;
            }
            if(s[1]==s[3] &&s[1]==s[6] &&s[1]==s[8] && s[2]==s[4] && s[2]==s[5] && s[2]==s[7] && flag2==0)
            {
                flag2=1;
                abhui=i;
            }
        }
        
    }
    printf("%d\n%d",hui,abhui);
    return 0;
}

8.子串分值和

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll pre[30];
string s;
 
int main()
{
    IOS;
    cin>>s;
    ll len=s.length();
    s="0"+s;//下标从1开始
    ll ans=0;
    for(ll i=1;i<=len;i++){
        ans+=(i-pre[s[i]-'a'])*(len-i+1);
        pre[s[i]-'a']=i;
    }    
    cout<<ans<<endl;
    getchar();
    getchar();
    return 0;

9.平面切分

#include<bits/stdc++.h>
using namespace std;

long double s[1010][2];//存储直线的A,B 
long long ans;
bool st[1010]; //false表示不是重边 
pair<long double,long double> p;

int main(){
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        cin>>s[i][0]>>s[i][1];
        set<pair<long double,long double> > points;
        for(int j=0;j<i;j++){
            if(st[j])continue;//直线是重边,跳过 
            if(s[i][0]==s[j][0]){//两条直线斜率相等时,判断是平行还是重合 
                if(s[i][1]==s[j][1]){
                    st[i]=true;//待添加直线是重边,退出循环 
                    break;
                }else continue;//直线平行,不需要计算交点 
            }
            p.first=(s[j][1]-s[i][1])/(s[i][0]-s[j][0]);//交点的x坐标 
            p.second=s[i][0]*p.first+s[i][1];//交点的y坐标 
            points.insert(p);
        }
        if(!st[i])ans+=points.size()+1;//若当前直线不是重边,更新答案 
    }
    cout<<ans+1;
    return 0;
}

10.字串排序

#include<bits/stdc++.h>

using namespace std;

int main(){
    string s;
    int res=0;
    cin>>s;
    int i=1,j;
    for(;i<=s.length();i++){
        int fr=i-0,ba=s.length()+1-i;
        for(j=i-1;j>0;j--){//向前 
            if(s[i-1]==s[j-1]){
                fr=i-j;
                break;
            }
        }
        for(j=i+1;j<=s.length();j++){//向后 
            if(s[i-1]==s[j-1]){
                ba=j-i;
                break;
            }
        }
        int n=fr*ba;
        res+=n;
        //printf("%d %d %d\n",fr,ba,n);
    }
    printf("%d",res);
    return 0;    
}

版权属于:染念
作品采用:本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
10
查看目录

目录

来自 《第十一届蓝桥杯大赛软件类省赛第二场C/C++大学B组》
评论

染念

博主很懒,啥都没有
145 文章数
533 评论量
4 分类数
149 页面数
已在风雨中度过 5年95天17小时44分
© 2022 染念的笔记
浙ICP备19020194号-1