[蓝桥杯2020初赛] 七段码与跑步锻炼

 七段码

小蓝要用七段码数码管来表示一种特殊的文字。


上图给出了七段码数码管的一个图示,数码管中一共有7 段可以发光的二极管,分别标记为a, b, c, d, e, f, g。
小蓝要选择一部分二极管(至少要有一个)发光来表达字符。在设计字符的表达时,要求所有发光的二极管是连成一片的。
例如:b 发光,其他二极管不发光可以用来表达一种字符。
例如:c 发光,其他二极管不发光可以用来表达一种字符。这种方案与上一行的方案可以用来表示不同的字符,尽管看上去比较相似。
例如:a, b, c, d, e 发光,f, g 不发光可以用来表达一种字符。
例如:b, f 发光,其他二极管不发光则不能用来表达一种字符,因为发光的二极管没有连成一片。
请问,小蓝可以用七段码数码管表达多少种不同的字符?

输出格式

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只输出这个整数,输出多余的内容将无法得分。

#include <bits/stdc++.h>
using namespace std;
string str = "0000000";
string vis;
int ans = 0;
//如何检查排列是否合法?
int umap[7][7];
void initmap()
{
    memset(umap, 0, sizeof(umap));
    umap[0][1] = umap[0][5] = 1;
    umap[1][0] = umap[1][2] = umap[1][6] = 1;
    umap[2][1] = umap[2][3] = umap[2][6] = 1;
    umap[3][2] = umap[3][4] = 1;
    umap[4][3] = umap[4][5] = umap[4][6] = 1;
    umap[5][0] = umap[5][4] = umap[5][6] = 1;
    umap[6][1] = umap[6][2] = umap[6][4] = umap[6][5] = 1;
}
void dfs(int curr)
{
    vis[curr] = '0';//标记访问过了
    for (int j = 0; j < 7; ++j)
    {
        if (umap[curr][j] == 1 && vis[j] == '1')
            dfs(j);
    }
}
bool check()
{
    int cnt = 0;
    for (int i = 0; i < 7;++i)
    {
        if(vis[i]=='1')
        {
            dfs(i);
            ++cnt;
        }
    }
    return cnt == 1;
}
int main()
{
    initmap();
    for (int i = 0; i < 7; ++i)
    {
        sort(str.begin(), str.end());
        str[6 - i] = '1';
        do
        {
            vis = str;
            if(check())
                ++ans;

        } while (next_permutation(str.begin(), str.end()));
    }
    cout << ans << endl;
    return 0;
}

跑步锻炼

小蓝每天都锻炼身体。
正常情况下,小蓝每天跑1 千米。如果某天是周一或者月初(1 日),为了激励自己,小蓝要跑2 千米。如果同时是周一或月初,小蓝也是跑2 千米。
小蓝跑步已经坚持了很长时间,从2000 年1 月1 日周六(含)到2020 年10 月1 日周四(含)。
请问这段时间小蓝总共跑步多少千米?

这是一道结果填空的题,你只需要算出结果后提交即可。
本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

#include<stdio.h>
#include<stdlib.h>
int main()
{
    int ans=0;
    int mon = 6;
    int monthes[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    
    for(int i = 2000; i <= 2020; i ++)
    {
        if((i%4==0&&i%100!=0)||(i%400==0))
            monthes[2]=29;
        else
            monthes[2]=28;
        
        for(int month = 1; month <= 12; month ++)
        {
            for(int day = 1; day <= monthes[month]; day ++)
            {
                ans ++;
                if(mon == 8)
                    mon = 1;
                if(mon == 1 || day == 1)
                ans ++;
                mon ++;
            
            if(i == 2020 && month == 10 && day == 1)//截至日期输出
                printf("%d",ans);
            }
        }
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/aasd23/article/details/124940563