七段码
小蓝要用七段码数码管来表示一种特殊的文字。
上图给出了七段码数码管的一个图示,数码管中一共有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;
}