蓝桥杯真题打卡题解 Day 3
额,至于为啥从第三天开始,就不解释了。
##第一题
作为C语言小i白的我刚开始接触这一道题,毋庸置疑,用了n个for循环,简直就是痛苦。而今天我要分享一下dfs做法。
###试题分析
问题分解:
首先,我们需要知道我们要用到1~9的数字。
其次,让其三边相加的结果相等。
最后,观察图可知 三个边在相加时有相等的元素。
话不多说 上代码
#include "stdio.h"
//纸牌排列
int a[10],book[10],total=0;
void dfs(int step)
{
int i,cont=0;
if(step==10){
//定义三个变量来保存并判断
int sum1,sum2,sum3;
sum1=a[1]+a[2]+a[3]+a[4];
sum2=a[4]+a[5]+a[6]+a[7];
sum3=a[7]+a[8]+a[9]+a[1];
if(sum1==sum2&&sum2==sum3){
total++;
}//条件符合的 次数加一
}
for (i=1;i<=9;i++){
//用book[i]==0来判断 为0 即未使用这个数,为1则表示被使用过了 去重
if(book[i]==0){
a[step]=i;
book[i]=1;
dfs(step+1);//引用自身,判断下一个数
book[i]=0;//重置,
}
}
}
int main(){
dfs(1);
printf("%d",total/6);
return 0;
}
运行结果:
144
##第二题
题目介绍
这题比较简单我是直接爆
代码如下:
#include<stdio.h>
int main()
{
int y;
for(y=1950;y<2014;y++){
int a=y/1000%10;
int b=y/100%10;
int c=y/10%10;
int d=y%10;
if(a+b+c+d==2014-y){
printf("%d\n",y);
}
}
return 0;
}
结果如下:
1988
2006
嗯,,因为小明年纪大点嘛 所以他的出生年纪肯定是1988而另一个自然是他表弟的年纪。
##总结
今天主要学习了bfs及dfs,
推荐博客链接