栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

2020蓝桥杯国赛c++B组(填空题)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

2020蓝桥杯国赛c++B组(填空题)

A.美丽的2

//美丽的2
//答案:563 
#include
using namespace std;
int check(int x)
{
	while(x)
	{
		if(x%10==2) return true;
		x/=10;
	}
	return false;
}
int main()
{
	int res=0;
	for(int i=1;i<=2020;i++)
	{
		if(check(i)) res++;
	}
	cout< 
B.扩散 

//扩散 
//BFS
//答案:20312088 
#include
using namespace std;
typedef pair PII;
const int N=6300;
int g[N][N];
int dist[N][N];
int dx[]={0,0,1,-1},dy[]={1,-1,0,0};
int bfs()
{
	memset(dist,-1,sizeof dist);
	queueq;
	q.push({0+2100,0+2100});
	q.push({2020+2100,11+2100});
	q.push({11+2100,14+2100});
	q.push({2000+2100,2000+2100});
	dist[2100][2100]=0;
	dist[4120][2111]=0;
	dist[2111][2114]=0;
	dist[4100][4100]=0;
	int cnt=0;
	while(q.size())
	{
		auto t=q.front();
		q.pop();
		if(dist[t.first][t.second]==2021) break;
		cnt++;
		for(int i=0;i<4;i++)
		{
			int nx=dx[i]+t.first,ny=dy[i]+t.second;
			if(dist[nx][ny]==-1)
			{
				q.push({nx,ny});
				dist[nx][ny]=dist[t.first][t.second]+1;
			}
		}
	}
	return cnt;
}
int main()
{
	cout< 
C.阶乘约数 

//阶乘约数
//N的约数个数=(cnt1+1)*(cnt2+1)*(cnt3+1)*.....*(cntk+1)
//cnt为N的所有质因数对应的出现次数
//因为,N=p1^cnt1+p2^cnt2+.......+pk^cntk 
//答案:39001250856960000
#include
using namespace std;
const int N=110;
unordered_mapa;
int main()
{
	int cnt=0;
	//先求出所有的质因数以及对应的个数 
	for(int i=1;i<=100;i++)
	{
		int x=i;
		for(int j=2;j<=x/j;j++)
		{
			while(x%j==0)
			{
				a[j]++;
				x/=j;
			}
		}
		if(x>1) a[x]++;
	}
	long long res=1;
	for(auto t:a)
	{
		int val=t.first,cnt=t.second;
		res=res*(cnt+1);
	}
	cout< 
D.本质上升序列 

//本质上升序列 
//BFS
//答案: 3616159 
#include
using namespace std;
typedef pairPSI;
string str="tocyjkdzcieoiodfpbgcncsrjbhmugdnojjddhllnofawllbhfiadgdcdjstemphmnjihecoapdjjrprrqnhgccevdarufmliqijgihhfgdcmxvicfauachlifhafpdccfseflcdgjncadfclvfmadvrnaaahahndsikzssoywakgnfjjaihtniptwoulxbaeqkqhfwl";
queueq;//用队列维护字串及字串最后一个位置 
unordered_mapst;//标记是否出现 
int ans;//记录个数 
int main()
{
	//先把长度为1的字符串加入队列 
	for(int i=0;i<200;i++)
	{
		string s="";
		s+=str[i];
		if(!st[s])
		{
			st[s]=1;//标记 
			q.push({s,i});//加入队列 
			ans++;//合法序列+1 
		}
	}
	//再通过bfs,把长度大于1的字符串加入队列,进行筛选判断 
	while(q.size())
	{
		auto t=q.front();
		q.pop();
		string s=t.first;
		int pos=t.second;
		for(int i=pos+1;i<200;i++)
		{
			if(str[i]>str[pos]&&!st[s+str[i]])
			{
				st[s+str[i]]=1;//标记 
				q.push({s+str[i],i});//加入队列 
				ans++;//合法序列+1 
			}
		}
	}
	cout< 
E.玩具蛇 

//玩具蛇 
//DFS
//答案: 552 
#include
using namespace std;
int ans;
int n=4;
int st[10][10];
int dx[]={0,0,1,-1},dy[]={1,-1,0,0};
void dfs(int x,int y,int u)
{
	if(u==n*n)
	{
		ans++;
		return ;
	}
	for(int i=0;i<4;i++)
	{
		int nx=dx[i]+x,ny=dy[i]+y;
		if(!st[nx][ny]&&nx>=1&&nx<=n&&ny>=1&&ny<=n)
		{
			st[nx][ny]=1;
			dfs(nx,ny,u+1);
			st[nx][ny]=0;
		}
	}
} 
int main()
{
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			st[i][j]=1;
			dfs(i,j,1);
			st[i][j]=0;
		}
	}
	cout<
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/867039.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号