第一题:0换零钞 - 蓝桥云课
模拟
cpp
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a,b,c=0;
for(a=1;a<200;a++)//一元钞票
{
for(b=1;b<100;b++)//两元钞票
{
for(c=1;c<40;c++)//五元钞票
{
if(b==a*10&&(a+b*2+c*5)==200)
{
cout<<a+b+c<<endl;
return 0;
}
}
}
}
return 0;
}
第二题:0激光样式 - 蓝桥云课
dfs枚举然后填空
cpp
#include <iostream>
using namespace std;
int main()
{
// 请在此输入您的代码
cout<<2178309<<endl;
return 0;
}
/*
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=30;
int ans=0;
void dfs(int x,int last)
{
if(x>30)
{
ans++;
return;
}
dfs(x+1,last);
if(last!=x-1||last==0)
{
dfs(x+1,x);
}
}
int main()
{
dfs(1,0);
cout<<ans<<endl;
return 0;
}
*/
第三题:0格雷码 - 蓝桥云课
填空题是没想到的
第四题:0调手表 - 蓝桥云课
用bfs
cpp
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int N=100010;
int n,k;
int dist[N];
int main()
{
cin>>n>>k;
memset(dist,-1,sizeof dist);
queue<int> q;
dist[0]=0;
q.push(0);
while(q.size())
{
int u=q.front();
q.pop();
int v1=(u+1)%n;
if(dist[v1]==-1)
{
dist[v1]=dist[u]+1;
q.push(v1);
}
int v2=(u+k)%n;
if(dist[v2]==-1)
{
dist[v2]=dist[u]+1;
q.push(v2);
}
}
int ans=0;
for(int i=0;i<n;i++)
{
ans=max(ans,dist[i]);
}
cout<<ans<<endl;
return 0;
}
第五题:0搭积木 - 蓝桥云课
想着是用dfs解决,但是没有解决出来
第六题:0矩阵求和 - 蓝桥云课
直接模拟--》拿到了10分
cpp
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1010,MOD=1e9+7;
int gcd(int a,int b)
{
return b==0?a:gcd(b,a%b);
}
int g[N][N];
int n;
long long sum=0;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
int x=gcd(i,j);
g[i][j]=x*x;
sum=(sum+g[i][j])%MOD;
}
}
cout<<sum<<endl;
return 0;
}