一、数字串个数
题目描述
小蓝想要构造出一个长度为 10000的数字字符串,有以下要求:
1.小蓝不喜欢数字0,所以数字字符串中不可以出现 0。
2.小蓝喜欢数字3和7,所以数字字符串中必须要有3和7这两个数字。
请问满足题意的数字字符串有多少个?这个数字会很大,你只需要输出其对 10^9+7取余后的结果。
大数计算,可以用python
二、不同的总分值
题目描述
在今年蓝桥杯的决赛中,一共有10道题目每道题目的分数依次为5分,5分,10分,10分,15分,15分,20
分,20,25分,25分。假设某位参赛选手在解答每一道题时,要么能得到该题的全部分数,要么就得0分。
那么请问,这位参赛选手在完成这10道题之后,所能获得的总分值存在多少种不同的情况?
注意,总分值仅需关注选手10道题的总得分,而无需关注具体是由哪些题获得了相应的分数。例如,选手第
一道题获得5分其余题均为0分,与第二道题获得5分其余题均为0分,应视为同一种情况。
解题
爆搜,用set去重
set的遍历
for(auto x:s)
cout<<x<<" ";
代码
#include<bits/stdc++.h>
using namespace std;
int a[10]={5,5,10,10,15,15,20,20,25,25};
set<int>s;
bool st[10];
void dfs(int u)//完成的题目和分数
{
if(u==10)//全部完成了
{
int score=0;
for(int i=0;i<10;i++)
score+=st[i]*a[i];
s.insert(score);
return;
}
//遍历所有情况
//做对
st[u]=true;
dfs(u+1);
st[u]=false;//恢复现场
//做错
st[u]=false;
dfs(u+1);
st[u]=true;//恢复现场
}
int main()
{
dfs(0);
for(auto x:s)
cout<<x<<" ";
printf("\n");
printf("%d",s.size());
return 0;
}